#php #arrays #loops
#php #массивы #циклы
Вопрос:
я пытаюсь создать массив из цикла в PHP.
Я хочу, чтобы массив заканчивался чем-то вроде $array(100,100,100,100), это мой код:
$x = 0;
while($x < 5){
$array[$x] = 100;
$x ;
}
echo $array[0];
Он выводит 1 вместо 100.
Может кто-нибудь сказать мне, где я ошибаюсь.
Комментарии:
1. Для меня копирование / вставка прямо в интерпретатор PHP работает корректно. PHP 5.3.8
2. Для меня это просто прелесть: codepad.org/9U8Yfqfp . Вы уверены, что
$array
он пуст перед вставкой новых значений?3. Цикл for был бы более подходящим, чем while здесь
for ($x = 0; $x < 5; $x )
, поскольку вы знаете как начальное, так и конечное значения$x
. т.е. Поскольку у вас есть заранее определенное количество итераций.
Ответ №1:
Несмотря на то, что для меня это работает идеально, вы должны заранее инициализировать переменную.
$array = array();
Например, если $array
это непустая строка, вы увидите вывод 1
.
Комментарии:
1. не могли бы вы объяснить, почему это происходит с непустой строкой? Я мог бы представить, что это приводит
11111
к приведению 100 к строке и получению первого символа, но не могу себе представить, почему это так1
.2. @NikiC — это потому, что он устанавливает символ в строке, а не новое значение массива, и
$array[0]
будет первым «символом» в строке; смотрите мою вторую демонстрацию.3. ах, понял, выводится $array[0], поэтому он принимает только первый 1.
Ответ №2:
Вы можете просто использовать предопределенную array_fill
функцию для этого:
$array = array_fill(0, 5, 100);
Ответ №3:
Другие ответы в значительной степени охватывают это. Я бы, однако, рекомендовал вам использовать для этого цикл for вместо цикла while, если вы собираетесь использовать цикл, а не функцию для этого.
$array = array();
for($x=0; $x<5; $x ) {
$array[$x] = 100;
}
На самом деле, вы могли бы сделать это еще короче.
$array = array();
for($x=0; $x<5; $array[$x ]=100);
Вполне допустимо иметь оператор цикла for вместо блока. И блоки тоже могут идти куда угодно; им не нужен оператор if, цикл for, цикл while или что-то еще перед ними.