Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中具有多个数组的foreach循环_Php_Loops_Foreach - Fatal编程技术网

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

php中具有多个数组的foreach循环,php,loops,foreach,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=> $v

我想使用这段代码为两个数组循环不止一个数组

$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");
}
}
}
array\u combine()
只能接受两个数组——它创建一个关联数组,使用第一个数组作为键,第二个数组作为相应的值。给它2个以上的数组是没有意义的,在这个结果中这些元素会去哪里

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

foreach ($array1 as $index => $val1) {
    $val2 = $array2[$index];
    $val3 = $array3[$index];
    ...
}

您要查找的是或取决于您的实际阵列结构

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

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

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

示例

$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){}
将结果数组作为单个数组循环

现场示例

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

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

var_dump($res);

从技术上讲,一次不能循环超过一个“事物”

但是,如果数组是相关的(related)。因此,假设
array1=>item1
array2=>item1
array3=>item1
相关。然后,我建议按如下方式构建阵列:

<?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";
    }
}
就拿这个例子来说

$array1  = [a1-item1,a1-item2,a1-item3];
$array2  = [a2-item1,a2-item2,a2-item3];
$array3  = [a3-item1,a3-item2,a3-item3];
这样构造它(基本上是一个矩阵)

然后,
array\u列(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\u列(0)
为您提供数组1,
$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]
];
只是开玩笑,别那样做会把你们都搞砸的。。。哈哈

有道理。

为什么它不起作用
array\u combine
只接受两个参数:

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

类似于array_的东西与不可定义的参数数组合 假设您确实希望使用该功能,但同时使用多个数组,如果您使用的是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
$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";
}

目标是什么?数组长度相等?这是对
foreach()
的无效使用,但在不知道输入数组的外观或所需输出的情况下,这就是我所能说的,您是在寻找数组合并而不是数组合并吗?数组是否相关,即数组1中的项1与数组2中的项1相关,与数组3中的项1相关。。。等等所有item1都是相关的。
array\u merge
将数组连接起来,但我认为他希望并行处理它们,就像他的第一个仅使用两个数组的示例一样。我讨厌
array\u merge\u recursive
它倾向于将非数组元素转换为数组。这是正确的行为,所以没有使用
array\u replace\u recursive
确实是我的错,但我仍然讨厌它。请看这个示例“一”和“七”变成数组。
a => 12
b => 34
c => 56
d => 156
e => 67
f => 5678
g => 346
h => 3487
<?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";
}