Reputation: 3128
I need to convert a string from this:
"name1", "b", "2", "name2", "c", "3", "name3", "b", "2", ....
to an array like this:
$arr[0]['name'] = "name1";
$arr[0]['char'] = "b";
$arr[0]['qnt'] = "2";
$arr[1]['name'] = "name2";
$arr[1]['char'] = "c";
$arr[1]['qnt'] = "3";
$arr[2]['name'] = "name3";
$arr[2]['char'] = "b";
$arr[2]['qnt'] = "2";
I tried to use explode()
to convert the string to an array but it does not work as needed.
Upvotes: 1
Views: 546
Reputation: 47894
Parse the csv string containing quoted values, then split that flat array into 3-element chunks, then forge associative rows using hardcoded keys.
Code: (Demo)
$text = <<<TEXT
"name1", "b", "2", "name2", "c", "3", "name3", "b", "2"
TEXT;
var_export(
array_map(
fn($chunk) => array_combine(['name', 'char', 'qnt'], $chunk),
array_chunk(str_getcsv($text), 3)
)
);
Upvotes: 0
Reputation: 316969
If you do not care about the array keys being numeric, you can do:
$string = 'name1, b, 2, name2, c, 3, name3, b, 2';
print_r( array_chunk( explode(',', $string), 3 ) );
Upvotes: 2
Reputation: 3112
$input = '"name1", "b", "2", "name2", "c", "3", "name3", "b", "2"';
$input = str_replace('"', '', $input);
$input = explode(', ', $input);
$output = array();
$i = 0;
while ($i < count($input)) {
$output[] = array(
'name' => $input[$i++],
'char' => $input[$i++],
'qnt' => $input[$i++]
);
}
print_r($output);
Output:
Array
(
[0] => Array
(
[name] => name1
[char] => b
[qnt] => 2
)
[1] => Array
(
[name] => name2
[char] => c
[qnt] => 3
)
[2] => Array
(
[name] => name3
[char] => b
[qnt] => 2
)
)
Upvotes: 3