【问题标题】:Warning: array_combine(): Both parameters should have an equal number of elements警告:array_combine():两个参数应该有相同数量的元素
【发布时间】:2023-03-29 12:44:01
【问题描述】:

array_combine()这里有问题

警告:array_combine():两个参数在第 X 行的 PATH 中的元素数量应相同

此错误显示在以下行:

foreach(array_combine($images, $word) as $imgs => $w)
{
    //do something
}

我该如何解决?

【问题讨论】:

  • 您是否尝试在两个数组中放置相同数量的元素?
  • 每个数组的元素数量应该相等,array_combine() 才能工作
  • 我想做的是,比如用户错误地添加了一个空值,如何避免出现这个错误?
  • 我的意思是当元素不相等时 array_combine() 的错误处理

标签: php arrays


【解决方案1】:

当您尝试合并两个长度不等的数组时会出现此错误。举个例子:

Array 1: Array (A, B, C)     //3 elements
Array 2: Array (1, 2, 3, 4)  //4 elements

array_combine() 不能合并这两个数组,会抛出警告。


有不同的方法来处理这个错误。

您可以检查两个数组是否具有相同数量的元素,如果有,则仅合并它们:

<?php

    $arrayOne = Array("A", "B", "C");
    $arrayTwo = Array(1, 2, 3);

    if(count($arrayOne) == count($arrayTwo)){
        $result = array_combine($arrayOne, $arrayTwo);
    } else{
        echo "The arrays have unequal length";
    }

?>

您可以组合这两个数组,并且只使用较小的数组中的元素:

<?php

    $arrayOne = Array("A", "B", "C");
    $arrayTwo = Array(1, 2, 3);

    $min = min(count($arrayOne), count($arrayTwo));
    $result = array_combine(array_slice($arrayOne, 0, $min), array_slice($arrayTwo, 0, $min));

?>

或者你也可以只填充缺失的元素:

<?php

    $arrayOne = Array("A", "B", "C");
    $arrayTwo = Array(1, 2, 3);

    $result = [];
    $counter = 0;

    array_map(function($v1, $v2)use(&$result, &$counter){
        $result[!is_null($v1) ? $v1 : "filler" . $counter++] = !is_null($v2) ? $v2 : "filler";     
    }, $arrayOne, $arrayTwo);

?>

注意:在所有示例中,您总是希望确保键数组只有唯一元素!因为否则 PHP 只会用相同的键覆盖元素,而你只会保留最后一个。

【讨论】:

  • 能否提供样品?
  • 您的解决方案被证明是对我有用的解决方案 - array_map 完成了这项工作!
【解决方案2】:

您可以使用 array_merge 代替 array_combine

例子:

array_merge($myFirstArray, $mySecondArray);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多