Создание пустого 2D-массива в PHP? - PullRequest
32 голосов
/ 07 июля 2011

Я знаю, что массивы создаются динамически, и создавать их заблаговременно не нужно, но как можно это сделать с 2D-массивом?Точно так же?

(for$j)
{
for($i)
    {
    $array[j][i] = "data";
    }
}

Что-то в этом роде?Конечно, реально для циклов.

Ответы [ 8 ]

46 голосов
/ 07 июля 2011

В самом простом случае двумерный массив можно создать как:

<?php
    $emptyArray = array(array());
?>

Или, начиная с PHP 5.4, вы также можете использовать:

<?php
    $emptyArray = [[]];
?>
21 голосов
/ 24 октября 2011

Вы не создаете 2d-массив в PHP, не в традиционном смысле.

Приведенные выше предложения о $a = array(array()); на самом деле просто создают следующий массив:

$a = array(
    0 => array( )
);

Таким образом, $a[0][0] = 'test'; приведет к следующему:

$a = array(
    0 => array(
        0 => 'test'
    )
);

На первый взгляд, похоже, что это работает, но на самом деле это еще не двумерный массив.Когда вы попытаетесь использовать вторую строку (индекс 1), в этот момент PHP выдаст уведомление.Например:

$a[1][0] = 'test2';

Это потому, что $a[1] ничего не содержит (помните, что array(array()) просто создает массив с индексом 0?).

Чтобы это работало, вам нужночтобы снова сделать $a[1] = array();, или, если вы хотите избежать индексов, которые вы можете сделать, $a[] = array();.


Пример

$a = array(); // array of columns
for($c=0; $c<5; $c++){
    $a[$c] = array(); // array of cells for column $c
    for($r=0; $r<3; $r++){
        $a[$c][$r] = rand();
    }
}

ВышеКод создает 5x3 «2d массив» случайных чисел.

3 голосов
/ 07 июля 2011

Документация PHP - это всегда хороший способ начать с такого рода основных вопросов.

<?php
$arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));

echo $arr["somearray"][6];    // 5
echo $arr["somearray"][13];   // 9
echo $arr["somearray"]["a"];  // 42
?>
2 голосов
/ 01 апреля 2014

Использование «array (array ())» создаст 2D-массив с «пустым» элементом в первой позиции. Чтобы создать действительно пустой 2D-массив, его необходимо удалить.

<?php
    $emptyArray = array(array());  // Creates a 2D array with one empty element in $emptyArray[0]
    array_pop($emptyArray);        // Pops element[0] off the array
?>
2 голосов
/ 23 апреля 2013

Если я хочу создать пустой массив для обработки строк из текстовых файлов, я просто использую $ array = array ();

2 голосов
/ 07 июля 2011

Не могли бы вы указать, что вы пытаетесь сделать?Вы можете перебирать многомерные массивы с помощью функции foreach

$ary=array( "subarr" => array("foo","bar") );

foreach($ary as $a){
  foreach($a as $ary_sub){
    echo $ary_sub;
  }
}

или

foreach($ary["subarr"] as $key=>$subval){
 echo $subval;
}
1 голос
/ 23 июня 2013
// dynamic 2D array

$twoD = array(array());
$val = 0;

// fill the array
for($r = 0; $r < 4; $r++) {
    for($c = 0; $c < 4; $c++) 
        $twoD[$r][$c] = $val++;
}

// print the current value of $val
echo $val."<br/>------------------<br/>";

// print the array  
for($r = 0; $r < 4; $r++) {
    for($c = 0; $c < 4; $c++) 
        echo $twoD[$r][$c];
    echo "<br/>";
}
0 голосов
/ 24 мая 2019

Помните, что всякий раз, когда вы используете вложенную функцию array(array()) или синтаксис короткого массива [[]], оба создают двумерный массив с элементом empty в первой позиции. Это может привести к некоторым ошибкам, поэтому мы должны удалить их.

Как мы можем удалить empty элемент?

Что ж, это абсолютно просто, если вызвать метод array_pop() для извлечения element[0] из массива, как показано ниже:

<?php
    $a = array(array());
    echo 'Before removing the empty element: \n'
    print_r($a);
    array_pop($a);
    print_r($a);

    $b = [[]];
    echo 'Before removing the empty element: \n'
    print_r($b);
    array_pop($b);
    print_r($b);
?>
...