Giffary
Giffary

Reputation: 3128

Convert a comma-separated string containing quoted values into an array of associative arrays with hardcoded keys

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

Answers (3)

mickmackusa
mickmackusa

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

Gordon
Gordon

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

Ed Mazur
Ed Mazur

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

Related Questions