具有多个多个数组的php中的foreach循环

时间:2018-04-04 21:22:34

标签: php loops foreach

我想循环使用这个代码

我可以为两个人做的多个数组
$value=array_combine($val1,$val2);

foreach($value as $vl1=> $vl2)

我现在尝试使用此代码执行两次以上但不起作用 我不知道哪里弄错了。

  $value=array_combine($val1,$val2,$val3,$val4,$val5,val6);

foreach($value as $vl1=> $vl2,$vl3=> $vl4,$vl5=> $vl6 )

由于

已编辑

这是完整的工作代码 - 感谢@Barmar 使用此代码,我能够将多个列和行提交到数据库中。

if(isset($_POST['submit'])){

 $head = $_POST['head'];
 $surname = $_POST['surname'];
 $othernames = $_POST['othernames'];
 $affiliate_email = $_POST['affiliate_email'];
 $affiliation = $_POST['affiliation'];
 $phone_no = $_POST['phone_no'];


 $value=array_combine($surname,$affiliate_email,$othernames,
 $head,$affiliation,$phone_no);

  foreach ($surname as $index => $sur) {
$affmail = $affiliate_email[$index];
$names = $othernames[$index];
$hd = $head[$index];
$affil = $affiliation[$index];
$phone = $phone_no[$index];


$page3="INSERT INTO tbl_name 
(affiliate_email,surname,othernames,affiliation,phone_no,head) VALUES  
'$affmail','$sur','$names','$affil','$phone','$hd')";
if(mysqli_query($db->connection, $page3)) {
header("location:page4?code=$app_code");
}
}
}

4 个答案:

答案 0 :(得分:2)

MethodInfo只能接受两个数组 - 它创建一个关联数组,该数组使用第一个数组作为键,第二个数组作为相应的值。给它提供超过2个数组是没有意义的,这些元素会在这个结果中出现在哪里?

循环遍历一个数组,并使用其索引访问其他数组。

array_combine()

答案 1 :(得分:0)

您要查找的内容为array_mergearray_merge_recursive,具体取决于您的实际数组结构。

  

将一个或多个数组的元素合并在一起,以便将一个值的值附加到前一个数组的末尾。它返回结果数组。

     

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键。但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加。

     

带有数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号。

示例

$arr1 = [1, 2, 3, 4, 5];
$arr2 = [6, 7, 8, 9, 10];
$arr3 = ['name' => 'Script47'];

$res = array_merge($arr1, $arr2, $arr3);

var_dump($res);

<强>输出

array(11) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
  [5]=>
  int(6)
  [6]=>
  int(7)
  [7]=>
  int(8)
  [8]=>
  int(9)
  [9]=>
  int(10)
  ["name"]=>
  string(8) "Script47"
}

此后,您可以使用foreach($array as $key => $value) { }将结果数组作为单个循环。

直播示例

Repl

答案 2 :(得分:0)

从技术上讲,你不能一次循环超过一个“Thing”。

但是,如果数组相关,(相关)。所以说array1 => item1array2 => item1有关,与array3 => item1有关。然后我建议像这样构建你的数组:

以此为例

$array1  = [a1-item1,a1-item2,a1-item3];
$array2  = [a2-item1,a2-item2,a2-item3];
$array3  = [a3-item1,a3-item2,a3-item3];

并像这样构建它(基本上是一个矩阵)

$combined1 = [
     [a1-item1,a1-item2,a1-item3],
     [a2-item1,a2-item2,a2-item3],
     [a3-item1,a3-item2,a3-item3]
];

然后array_column(0)为您提供所有item1,$combined[0]为您提供所有array1。

相反,你也可以采取相反的方式。

 $combined2 = [
      [a1-item1,a2-item1,a3-item1],
      [a1-item2,a2-item2,a3-item2],
      [a1-item3,a2-item3,a3-item3]
 ];

然后array_column(0)为您提供array1,$combined[0]为您提供所有第1项。

哪种方式对你正在做的事情更有意义。唯一的区别是你在foreach循环中获得的东西。

 foreach($combined1 as $array){
    print_r($array);
 }
 //Outputs: [a1-item1,a1-item2,a1-item3]

 foreach($combined2 as $array){
    print_r($array);
 }
 //Outputs: [a1-item1,a2-item1,a3-item1]

然后你可以按照你想要的方式将它循环到你心中。

然后你可以翻转这个中间的像

$combined1 = [
     [a1-item1,a1-item2,a1-item3],
     [a2-item3,a2-item2,a2-item1],
     [a3-item1,a3-item2,a3-item3]
];

开个玩笑,不要那样做会弄乱你们所有人......哈哈

有道理。

答案 3 :(得分:0)

为什么它不起作用

array_combine只接受两个论点:

http://php.net/manual/en/function.array-combine.php

你不能那样使用foreach。每个foreach可能只有一个键和一个值,但您可以在另一个foreach内使用foreach

像array_combine那样具有不可确定的参数编号

假设您确实想要使用该功能,但同时使用多个阵列,如果您使用的是PHP 7或更高版本,则可以实现类似的功能:

<?php

function array_combine_many(array ...$keysAndValues)
{
    $length = count($keysAndValues);
    if ($length % 2 != 0) {
        throw new \Error("The number of arguments should be even. It's: $length.");
    }

    $combinations = array();
    for ($i = 0; $i < $length; ++$i) {
        $combinations[] = array_combine(
            $keysAndValues[$i],
            $keysAndValues[++$i]
        );
    }
    return $combinations;
}

如果您不使用PHP 7或更高版本,则必须使用func_get_args功能:

<?php

function array_combine_many()
{
    $keysAndValues = func_get_args();
    $length = count($keysAndValues);
    // etc...

foreach in foreach

你可以使用这样的实现函数:

<?php

$val1 = ['a', 'b', 'c'];
$val2 = ['12', '34', '56'];
$val3 = ['d', 'e', 'f', 'g'];
$val4 = ['156', '67', '5678', '346'];
$val5 = ['h'];
$val6 = ['3487'];

$combinations = array_combine_many($val1, $val2, $val3, $val4, $val5, $val6);

foreach ($combinations as $combination) {
    foreach ($combination as $key => $val) {
        echo "$key => $val\n";
    }
}

输出:

a => 12
b => 34
c => 56
d => 156
e => 67
f => 5678
g => 346
h => 3487

使用array_map,array_merge和call_user_func_array

这是另一种解决方案:

<?php
$merged = call_user_func_array(
    'array_merge',
     array_map(
        function (array $args) {
            return array_combine($args[0], $args[1]);
        },
        [
            [$val1, $val2],
            [$val3, $val4],
            [$val5, $val6]  
        ]
    )
);
foreach ($merged as $key => $value) {
    echo "$key => $value\n";
}