如何在foreach循环中同时打印两个数组?

Rav*_*id' 4 php foreach

可能重复:
在PHP中同时迭代两个关联数组

我有两个数组$name[]$type[].我想通过这样的foreach循环打印那些arraya,

<?php
foreach($name as $v && $type as $t)
{
echo $v;
echo $t;
}
?>
Run Code Online (Sandbox Code Playgroud)

我知道这是错误的方式,然后告诉我这样做的正确方法.

Jon*_*Jon 10

你不能这样做.您需要执行以下操作之一:

  1. 使用for循环并"共享"索引变量,或
  2. 手动迭代each和朋友,或
  3. 将两个数组压缩在一起 array_map

示例for:

for ($i = 0; $i < count($name); ++$i) {
    echo $name[$i];
    echo $type[$i];
}
Run Code Online (Sandbox Code Playgroud)

可能的问题:数组需要用数字索引,如果它们的长度不同,那么你使用的数组就很重要count.您应该定位较短的数组,也可以采取适当的措施,不要将较长的数组索引到超出范围内.

示例each:

reset($name);  // most of the time this is not going to be needed,
reset($type);  // but let's be technically accurate

while ((list($k1, $n) = each($name)) && (list($k2, $t) = each($type))) {
    echo $n;
    echo $t;
}
Run Code Online (Sandbox Code Playgroud)

可能的问题:如果数组长度不同,那么在"较短"数组耗尽后,这将停止处理元素.您可以通过交换改变||&&,但你必须考虑的一个$n$t不能总是有一个有意义的值.

示例array_map:

// array_map with null as the callback: read the docs, it's documented
$zipped = array_map(null, $name, $type);

foreach($zipped as $tuple) {
    // here you could do list($n, $t) = $tuple; to get pretty variable names
    echo $tuple[0]; // name
    echo $tuple[1]; // type
}
Run Code Online (Sandbox Code Playgroud)

可能的问题:如果两个数组的长度不同,那么较短的数组将使用空值进行扩展; 你无法控制这一点.此外,虽然方便这种方法确实使用额外的时间和内存.