Atl*_*tli 78

您还可以通过指定数组的索引来创建关联数组或类似"散列表"的数组.

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => 'john@example.com'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => 'jane@example.com'
    ),
);
Run Code Online (Sandbox Code Playgroud)

这相当于

$array = array();

$array[0] = array();
$array[0]['name'] = 'John Doe';
$array[0]['email'] = 'john@example.com';

$array[1] = array();
$array[1]['name'] = 'Jane Doe';
$array[1]['email'] = 'jane@example.com';
Run Code Online (Sandbox Code Playgroud)

  • 我们如何使用循环语句创建相同的数组? (2认同)

Dav*_*unt 63

以下是等效的,并产生二维数组:

$array = array(
    array(0, 1, 2),
    array(3, 4, 5),
);
Run Code Online (Sandbox Code Playgroud)

要么

$array = array();

$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
Run Code Online (Sandbox Code Playgroud)

  • 那些不会产生二维数组,而是产生一个数组数组. (6认同)
  • @dotancohen PHP和C#之间的内存需求通常非常不同,因为每种语言的运行时都有自己处理内存的方式.这通常不是你在实践中关心的事情.除非您碰巧构建某种长期运行的高性能应用程序,比如游戏,否则PHP将是一种奇怪的语言选择. (6认同)
  • @dotancohen那真的是语义.实际上这两个概念是相同的.在那里演示的内容与C#等语言中使用的多维数组之间的唯一区别是语法.这方面的语法差别很小. (4认同)

Kor*_*nel 36

刚刚申报?你不必.只需确保变量存在:

$d = array();
Run Code Online (Sandbox Code Playgroud)

数组动态调整大小,并尝试向非exsistant元素写入任何内容创建它(并在需要时创建整个数组)

$d[1][2] = 3;
Run Code Online (Sandbox Code Playgroud)

这对任何数量的维度都有效,无需事先声明.

  • 除了它没有告诉你任何尺寸.如果你正在声明一个M x N二维数组,很可能它是一个矩阵,如果它是一个矩阵,你可能会在它上面进行乘法运算,这就需要迭代元素,如果它是你不能做的"稀疏",不知道尺寸. (3认同)
  • PHP仍然没有多维数组.总是可能会退出一个数组数组可能是稀疏的.那么,如何使用数组创建一个实现矩阵的类,至少那样你就会更加关注正确的实现. (2认同)

cle*_*tus 26

首先,PHP没有多维数组,它有数组数组.

其次,您可以编写一个可以执行此操作的函数:

function declare($m, $n, $value = 0) {
  return array_fill(0, $m, array_fill(0, $n, $value));
}
Run Code Online (Sandbox Code Playgroud)

  • 除非你需要**迭代**或确定它的大小,就像你说做矩阵乘法一样.填充数组值有一个完全有效的案例. (7认同)
  • 您不是说“数组数组”而不是“数组数组”吗? (2认同)

Kin*_*lmn 11

对于一个简单的"随时随地填充"的解决方案:

$foo = array(array());

这将为你提供一个灵活的伪二维数组,可以保存$ foo [ n ] [ n ],其中n <=∞(当然你受限于通常的内存大小限制,但你得到了我希望的想法).理论上,这可以扩展为根据需要创建任意数量的子阵列.


Amb*_*ber 9

或者对于较大的数组,所有数组都具有相同的值:

$m_by_n_array = array_fill(0, $n, array_fill(0, $m, $value);
Run Code Online (Sandbox Code Playgroud)

将创建一个$m$n一切设置为阵列$value.


小智 6

atli的回答确实帮助我理解了这一点。以下是如何迭代二维数组的示例。此示例展示了如何查找数组的已知名称的值,以及如何查找 foreach,您只需遍历在那里找到的所有字段。我希望它能帮助某人。

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => 'john@example.com'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => 'jane@example.com'
    ),
);

foreach ( $array  as $groupid => $fields) {
    echo "hi element ". $groupid . "\n";
    echo ". name is ". $fields['name'] . "\n";
    echo ". email is ". $fields['email'] . "\n";
    $i = 0;
    foreach ($fields as $field) {
         echo ". field $i is ".$field . "\n";
        $i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

hi element 0
. name is John Doe
. email is john@example.com
. field 0 is John Doe
. field 1 is john@example.com
hi element 1
. name is Jane Doe
. email is jane@example.com
. field 0 is Jane Doe
. field 1 is jane@example.com
Run Code Online (Sandbox Code Playgroud)