user3845133
user3845133

Reputation:

Create nested array by array of keys

I've some difficulties creating a nested array by array of keys and assigning a value for the last nested item.

For example, lets $value = 4; and $keys = ['a', 'b', 'c'];

The final result should be:

[
  'a' => [
    'b' => [
      'c' => 4
    ]
  ]
]

I've tried with a recursion, but without success. Any help would be greatly appreciated.

Upvotes: 4

Views: 2922

Answers (3)

user14150589
user14150589

Reputation: 1

Solution by getting a nested item in the resulting array by reference:

$value = 4;
$keys = ['a', 'b', 'c'];

$result = [];

$reference = &$result;
foreach($keys as $key) {
    if (!array_key_exists($key, $reference)) $reference[$key] = [];
    $reference = &$reference[$key];
}
$reference = $value;

print_r($result);

Upvotes: 0

Gavriel
Gavriel

Reputation: 19237

you don't need recursion, just do it from the right to left:

$a = $value;
for ($i = count($keys)-1; $i>=0; $i--) {
  $a = array($keys[$i] => $a);
}

or the even shorter version from @felipsmartins:

$a = $value;
foreach (array_reverse($keys) as $valueAsKey) $a = [$valueAsKey => $a]; 

Upvotes: 8

Jakir Hossain
Jakir Hossain

Reputation: 2517

Your can try it.

$value = 4;
$keys = ['a', 'b', 'c'];
$a = $value;
$i=count($keys)-1;
foreach($keys as $key){
    $a = array($keys[$i] => $a);
    $i--;
}
print_r($a);

Output

Array
(
    [a] => Array
        (
            [b] => Array
                (
                    [c] => 4
                )

        )

)

Upvotes: 1

Related Questions