PHP создает многомерный ассоциативный массив из имен ключей - PullRequest
0 голосов
/ 19 октября 2019

Даже если это задокументировано, мне нужна помощь, чтобы лучше понять этот код (только ссылки). Я уже проверил учебники, но они мне не помогли.

// initialize variables
$val = 'it works !';
$arr = [];

// Get the keys we want to assign
$keys = [ 'key_1', 'key_2', 'key_3', 'key_4' ];

// Get a reference to where we start
$curr = &$arr;

// Loops over keys
foreach($keys as $key) {
   // get the reference for this key
   $curr = &$curr[$key];
}

// Assign the value to our last reference
$curr = $val;

// visualize the output, so we know its right
var_dump($arr);
echo "<hr><pre>\$arr : "; print_r($arr);

(Источник: https://stackoverflow.com/a/31103901/4741362 @Derokorian)

1 Ответ

1 голос
/ 20 октября 2019

Я постараюсь объяснить это, чтобы вы поняли это немного лучше, см. Рабочий код здесь . Я надеюсь, что это поможет вам понять эту $curr = &$curr[$key]; строку. $curr указывает на пустое $arr до начала foreach, в foreach он сохраняет значение $key в $arr по ссылке, на которую указывает $curr, а затем переназначает ссылку навновь сохраненные $key в $arr снова указатель $curr.

// initialize variables
$val = 'it works !';
$arr = [];

// Get the keys we want to assign
$keys = [ 'key_1', 'key_2', 'key_3', 'key_4' ];

// Get a reference to where we start
echo "create a space where to save the first key \r\n";
$curr = &$arr;

// Loops over keys
$i = 1;
foreach($keys as $key) {

    echo "**************** Iteration no $i ******************\r\n";
    // echo "save the value \"$key\" to the reference created earlier in the \$curr variable for the empty array above where the kesy are actually being saved \r\n";

    // get the reference for this key
    echo "Now save the value of \$key to the array reference present in \$curr and then assigne the reference of newly saved array item to \$curr again \r\n";
    $curr = &$curr[$key];
    print_r($arr);

   $i++;
   echo "\r\n\r\n";
}

// Assign the value to our last reference
$curr = $val;

// visualize the output, so we know its right
print_r($arr);
...