如果数组中的键不存在,我尝试合并两个数组,但我无法完成此操作。我能怎么做?这就是我的尝试:
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)
答案 0 :(得分:0)
这有几个问题:
in_array
将搜索给定数组的值,而不是键,因此在这种情况下,您最终会检查值" 0"存在于数组$variable
中。我假设你想检查密钥是否已经存在。array_push
将新的值推送到下一个可用密钥中。您需要检查密钥是否存在,如果不存在,请使用现有值添加密钥。试试这个:
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_merge
(http://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);