两个数组如何在单个foreach循环中扩展?

时间:2013-09-03 11:21:41

标签: php arrays

我想在单个foreach循环中扩展两个数组,如..

$array=array(1,2,3,4,5,6,7,);
$array2=array(1=>'b','2=>c',3=>'d',4=>'e',5=>'f',6=>'g',7=>'x');

foreach($array as first && $aaray2 as second){
  echo first;
  echo second;    
}

有可能吗? 我如何调用每个数组的索引和每个数组的值

6 个答案:

答案 0 :(得分:3)

由于您的数组不使用命名键,因此您可以重用数组键。如果使用命名键,则仅在键相同时才有效。

foreach ($array as $key => $value) {
    echo $value;
    echo $array2[$key];
}

你也可以使用从0到数组长度的for循环计数,因为如果你没有指定任何数字,php会自动使用数字作为键,但上面的解决方案可能更具可读性,并且可以使用命名键。

答案 1 :(得分:2)

您可以使用array_combine创建一个包含key =>值对的数组。

foreach(array_combine($array, $array2) as $key => $value){

    echo $key;
    echo $value;

}

(array_combine返回组合数组,如果每个数组的元素数不相等则为FALSE)

答案 2 :(得分:0)

你可以像这样使用两个for循环:

foreach($array as $arr) {
        echo $arr;
        for($i=1; $i<count($array2); $i++){
            echo $array2[$i];
        }
}

答案 3 :(得分:0)

前几天我写了一个ZipIterator课程,专门用来做这个。

用法示例:

$array=array(1,2,3,4,5,6,7,);
$array2=array('b','c','d','e','f','g','x');

foreach (new ZipIterator($array, $array2) as $pair) {
    echo "first: ".$pair[0].", second: ".$pair[1];
}

功能

  • 适用于所有类型的traversables,而不仅仅是数组
  • 适用于任意数量的可穿越者(不一定是两个)
  • 对traversables中包含的值没有限制
  • 可配置为在短路可穿越序列结束时停止(默认行为),或继续运行直至所有短路都用完

<强>要求:

  • PHP 5.4或更高版本

See it in action 并从GitHub抓取the source

答案 4 :(得分:0)

$array=array(1,2,3,4,5,6,7,);
$array2=array('b','c','d','e','f','g','x');

$mi = new MultipleIterator(
    MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_ASSOC
);
$mi->attachIterator(new ArrayIterator($array), 'val');
$mi->attachIterator(new ArrayIterator($array2), 'val2');
foreach($mi as $details) {
    echo $details['val'], ' - ', $details['val2'], PHP_EOL;
}

$array=array(1,2,3,4,5,6,7,);
$array2=array('b','c','d','e','f','g','x');

$mi = new MultipleIterator(
    MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_ASSOC
);
$mi->attachIterator(new ArrayIterator($array), 'val');
$mi->attachIterator(new ArrayIterator($array2), 'val2');
foreach($mi as $details) {
    extract($details);
    echo $val, ' - ', $val2, PHP_EOL;
}

或仅适用于PHP 5.5+

$array=array(1,2,3,4,5,6,7,);
$array2=array('b','c','d','e','f','g','x');

$mi = new MultipleIterator(
    MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_ASSOC
);
$mi->attachIterator(new ArrayIterator($array));
$mi->attachIterator(new ArrayIterator($array2));
foreach($mi as list($val, $val2)) {
    echo $val, ' - ', $val2, PHP_EOL;
}

答案 5 :(得分:-1)

只需合并两个数组并执行循环

$array=array(1,2,3,4,5,6,7,);
$array2=array('b','c','d','e','f','g','x');

$array = array_merge($array, $array2);

foreach ($array as $value) {
    echo $value;
}