базовый php-массив из цикла

#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 или что-то еще перед ними.