Массив странным образом меняется, не манипулируя им - PullRequest
2 голосов
/ 30 ноября 2011

Я сталкиваюсь с очень странным поведением. У меня есть массив $answer_styles с некоторыми данными, которыми я должен манипулировать:

foreach($answer_styles as $id => &$answer_style){
    $answer_style['id'] = $id;
    $answer_style_names[$id] = $answer_style['name'];
}
array_multisort($answer_style_names, SORT_ASC, SORT_STRING, $answer_styles);

и затем я сохраняю его в другой переменной для дальнейшего использования: $stats['answer_styles'] = $answer_styles;

Теперь мне нужно перейти к исходному массиву, используя цикл foreach. Я сделал это:

debug($stats['answer_styles']);
foreach($answer_styles as $answer_style){
    debug($stats['answer_styles']);
        ...

Проблема в том, что первая отладка показывает данные, которые она должна показывать, но вторая отладка показывает последнюю запись, перезаписанную первой (так, с 1, 2, 3, 4 теперь она показывает 1, 2, 3, 1). Почему это происходит, поскольку я манипулирую не массивом $stats, а массивом $answer_styles?

EDIT

Это вывод для первой, соответственно, второй отладки:

app/models/test.php (line 299)

Array
(
[0] => Array
    (
        [name] => Alege din 3
        [count] => 8
        [correct] => 2
        [id] => 3
    )

[1] => Array
    (
        [name] => Alege din 4
        [count] => 3
        [correct] => 2
        [id] => 2
    )

[2] => Array
    (
        [name] => Alege din 6
        [count] => 7
        [correct] => 3
        [id] => 4
    )

[3] => Array
    (
        [name] => Scrie raspunsul
        [count] => 2
        [correct] => 1
        [id] => 1
    )

)


app/models/test.php (line 301)

Array
(
[0] => Array
    (
        [name] => Alege din 3
        [count] => 8
        [correct] => 2
        [id] => 3
    )

[1] => Array
    (
        [name] => Alege din 4
        [count] => 3
        [correct] => 2
        [id] => 2
    )

[2] => Array
    (
        [name] => Alege din 6
        [count] => 7
        [correct] => 3
        [id] => 4
    )

[3] => Array
    (
        [name] => Alege din 3
        [count] => 8
        [correct] => 2
        [id] => 3
    )

)

1 Ответ

6 голосов
/ 30 ноября 2011

Это потому, что вы сохраняете ссылку на элемент массива с этим выражением & $ answer_style и используете то же имя переменной во втором цикле.

сделать:

unset($answer_style);

после первого цикла и все будет исправлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...