可能重复:
在 PHP 中同时遍历两个关联数组
我有两个数组$name[]
和$type[]
. 我想像这样通过foreach循环打印那些arraya,
<?php
foreach($name as $v && $type as $t)
{
echo $v;
echo $t;
}
?>
我知道这是错误的方法,然后告诉我正确的方法。
可能重复:
在 PHP 中同时遍历两个关联数组
我有两个数组$name[]
和$type[]
. 我想像这样通过foreach循环打印那些arraya,
<?php
foreach($name as $v && $type as $t)
{
echo $v;
echo $t;
}
?>
我知道这是错误的方法,然后告诉我正确的方法。
你不能那样做。您需要执行以下操作之一:
for
:for ($i = 0; $i < count($name); ++$i) {
echo $name[$i];
echo $type[$i];
}
可能的问题:数组需要进行数字索引,如果它们的长度不同,那么使用哪个数组很重要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;
}
可能的问题:如果数组的长度不同,那么这将在“较短”数组用完后停止处理元素。您可以通过交换 来更改它||
,&&
但是您必须考虑其中一个$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
}
可能的问题:如果两个数组的长度不同,那么较短的数组将用空值扩展;你无法控制这个。此外,虽然这种方法很方便,但确实会使用额外的时间和内存。
如果数组的长度始终相同,并且元素是唯一的,并且如果 的所有值$name
都是字符串或整数,则可以使用array_combine
:
foreach (array_combine($name, $type) as $v => $t) {
echo $v, $t;
}
array_combine
创建一个新数组,第一个数组的元素提供键,而第二个数组的元素提供值。
你可以这样做
for ($i = 0; $i < max(count($name), count($type)); $i++) {
if(isset($name[$i]))
echo 'name[' . $i . '] = ' . $name[$i];
if(isset($type[$i]))
echo 'type[' . $i . '] = ' . $type[$i];
}