@dimka_shaman

Не понятно почему я получаю такой вывод?

Я учусь PHP и столкнулся с непонятным выводом.

я написал код, который по идее должен создать массив из 10 массивов по 10 рандомных цифр от 1 до 10 каждый...
<?php

    $arr = array_fill(0,10,[]);   //создаю массив массивов
    foreach ($arr as $element) {

                 for ($i=0;$i<10;$i++) $element[] = rand(1,10);    //забиваю рандомные цифры в подмассив
                 var_dump($element); echo '<br>';  //проверяю получившийся подмассив
    }
        echo '<br>';
    var_dump($arr);  //проверяю массив, вардамп показывает что у меня массив из 10 пустых подмассивов... ???
    echo '<br>'.'<br>';
    var_dump($arr[3]);  //проверяю 4 подмассив и показывает пустой массив..
    
    ?>


Выглядит так, будто $arr не изменяется под действием цикла, но ведь должен?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
немного документации
Для того, чтобы напрямую изменять элементы массива внутри цикла, переменной $value должен предшествовать знак &. В этом случае значение будет присвоено по ссылке.(с)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Sanovskiy
@Sanovskiy
Веб-разработчик с 2005 года
Самый простой вариант
<?php
$arr = [];
for ($ii=0;$ii<10;$ii++){
  $arr[$ii] = [];
  for ($jj=0;$jj<10;$jj++){
    $arr[$ii][$jj] = rand(1,10);
  }
}
var_dump($arr);


А вот код чуть поинтереснее
<?php

$arr = array_fill(0,10,null);

$arr = array_map(function($elem){
	$elem = array_fill(0,10,null);
	return array_map(function($subelem){
		return rand(1,10);
	},$elem);
},$arr);

var_dump($arr);

array_map()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы