PHP массив не установлен - PullRequest
2 голосов
/ 26 марта 2011

Здесь код (выполняется в php 5.3.5 и 5.2.13):

$res = array(1, 2, 3);

unset($res[0]);

for($i = 0; $i < sizeof($res); $i++)
{
  echo $res[$i] . '<br />';
}

В результатах я вижу

<br />2<br />

Почему только один элемент, а первый пустой? Не могу понять. При выполнении:

print_r($res);

См:

Array ( [1] => 2 [2] => 3 )

Спасибо за помощь!

Ответы [ 5 ]

8 голосов
/ 26 марта 2011

Это потому, что вы начинаете с $i = 0;, а не с 1, который является новым первым индексом.Последний элемент отсутствует, потому что он останавливается перед вторым (ранее третьим) элементом, так как размер был уменьшен до 2. Это должно получить желаемые результаты:

foreach($res as $value) {
    echo $value . '<br />';
}
3 голосов
/ 26 марта 2011

PHP не переставляет ключи при отключении. Ваши ключи после сброса - 1 и 2. В цикле for i получает значения 0 и 1. Используя этот фрагмент, вы должны инициализировать i до 1, первый ключ массива.

Подсказка 1: используйте foreach для перебора массива.
Подсказка 2: не используйте псевдонимы. Используйте count вместо sizeof .

2 голосов
/ 26 марта 2011

Потому что после unset sizeof array = 2

И в основном используйте error_reporting(E_ALL) для разработки, это поможет вам

1 голос
/ 26 марта 2011

Это итерация 2 раза, первый раз, когда он обращается к индексу 0, который вы сбросили, второй раз, когда он обращается к индексу 1, который вы видите выводимым.Несмотря на то, что в индексах 1 и 2 есть только два элемента, вы все еще начинаете с исходного индекса.

1 голос
/ 26 марта 2011

Это работает не так, как ожидалось, потому что когда вы сбрасываете, sizeof () возвращает 2. Таким образом, вы выполняете цикл от 0 до 2 (иначе 1).

Таким образом, он будет отображать толькоиндекс 1, потому что вы сбрасываете элемент на 0.

Простым решением для этого будет использование цикла foreach:

foreach($res as $value){
    echo $value .'<br />';
}
...