如果key不存在,则进行数组合并

时间:2015-01-19 10:33:35

标签: php arrays

如果数组中的键不存在,我尝试合并两个数组,但我无法完成此操作。我能怎么做?这就是我的尝试:

  array (size=3)  // name of the array $exchange
  'purchase' => string '1' (length=1)
  'agriculture' => string '1' (length=1)

 array (size=6)  // name of the array $fixed
  'purchase' => string '0' (length=1)
  'ICT' => string '0' (length=1)
  'agriculture' => string '0' (length=1)
  'entertainment' => string '0' (length=1)
  'goods and service' => string '0' (length=1)
  'other' => string '0' (length=1)

   foreach($fixed as $keys=>$values){

    if(!in_array($values, $exchange, true)){

       array_push($exchange, $keys);
    }
   }

我得到了这个结果:

 array (size=7)
 'ICT' => string '1' (length=1)
 0 => string 'purchase' (length=8)
 1 => string 'ICT' (length=3)
 2 => string 'agriculture' (length=11)
 3 => string 'entertainment' (length=13)
 4 => string 'goods and service' (length=17)
 5 => string 'other' (length=5)

但我想:

 array (size=7)
 'ICT' => string '1' (length=1)
 'purchase' => string '0' (length=8)
 'agriculture' => string '0' (length=11)
 'entertainment' => string '0' (length=13)
 'goods and service' => string '0' (length=17)
 'other' => string '0' (length=5)

4 个答案:

答案 0 :(得分:0)

这有几个问题:

  1. in_array将搜索给定数组的,而不是键,因此在这种情况下,您最终会检查值" 0"存在于数组$variable中。我假设你想检查密钥是否已经存在。
  2. array_push将新的推送到下一个可用密钥中。
  3. 您需要检查密钥是否存在,如果不存在,请使用现有值添加密钥。试试这个:

    for($fixed as $key=>$value)
    {
        if(!isset($exchange[$key])) // Check if the key exists
        {
            $exchange[$key] = $value; // Add the new key -> value pair.
        }
    }
    

答案 1 :(得分:0)

尝试使用array_mergehttp://php.net/manual/es/function.array-merge.php

$result = array_merge($array1, $array2);

答案 2 :(得分:0)

试试这个:

foreach ($fixed as $keys => $values) {
    if (! array_key_exists($keys, $exchange)) {
        $exchange[$keys] = $values;
    }
}

它检查$keys中是否已存在密钥$exchange,并将其与其值($values)一起添加。

或者您只需使用以下内容替换整个foreach()

$exchange = $exchange + $fixed;

添加$exchange + $fixed会将$exchange $fixed中的密钥(及其值)添加到$exchange但不在$exchange中。然后将组合数组存储在{{1}}。

另请阅读this answer。它解释了您的代码错误的位置。

答案 3 :(得分:-1)

根据您的需要,您可以通过多种方式实现这一目标:

foreach($fixed as $key=>$values){
    if(!isset($exchange[$key])){
        $exchange[$key]=values;
    }
}

$exchange += $fixed;

$exchange = array_merge($fixed,$exchange);