array_combine():两个参数应具有相等数量的元素

时间:2018-09-23 22:43:56

标签: php arrays array-map

我有一种方法可以像key : value那样转换输入,其中key是语言ID,而value是该语言的值

我已经阅读了类似的问题,但是没有一个回答我的问题,因为我知道两个元素具有相同数量的元素

$transformation = array_map(
    function($v) { 
        $keys = $this->langCtrl->getLangsId($this->client)->toArray();
        //if $v has less thant 1 element it return an string instead of an array
        //so i check first the length
        if(count($v) <= 1) {
           return [$this->langCtrl->getLangsId($this->client)->toArray()[0] => $v];
        }else {
           //here is the problem
           //$keys and $v, both are the same length (dd($keys) dd($v) below)
           return array_combine($keys, $v); 
        }
    }, 
    $tmp_arr
 );

该代码适用于第一部分,但是当我检查$v > 1时出现错误

array_combine(): Both parameters should have an equal number of elements

在您告诉我两个值都必须具有相同的长度之前,我已经检查过并且两个值均具有相同的长度,

count($keys) : 2

count($v) : 2

count($keys) == count($v) : true

dd($ keys)

array:2 [▼
  0 => 1
  1 => 2
]

dd($ v)

array:2 [▼
  0 => "lang es"
  1 => "lang en"
]

您可以看到两者具有相同数量的元素,但是错误仍然存​​在,为什么会这样?我该怎么解决?

1 个答案:

答案 0 :(得分:0)

如果数组组合不适用于您。然后使用下面的自定义代码示例组合两个长度相同的数组。

$temp1=array("1","2");
$temp2=array("lang1", "lang2");
$temp3=array_combine($temp1, $temp2); // using php array combine function
 // OR
// custom PHP array combine code
$i=0;  
if(count($temp1) == count($temp2)){
   foreach($temp1 as $key => $value){
      $temp4[$value]=$temp2[$i];
      $i++;
   }
}

$ temp3和$ temp4具有相同的结果。