$array = json_decode('[{"1234567":1368356071},{"7654321":1368356071}, etc, etc]');
$array2 = array(array(1234567 => time()), array(7654321 => time()));
foreach($array2 as $key){
if(!array_key_exists(key($key),$array))
array_push($array, $key);
}
为什么$ array中的$键仍然被推送到$ array?
我正试图阻止重复键被推入$ array ..
答案 0 :(得分:2)
试试这个
你有三个问题
1)您正在将数组解码为stdObject,应将其设置为true以将其返回到数组
2)你需要将数组循环为foreach($ array2 as $ key => $ val)
3)在array_key_exists函数中传递为$ array [0]
$array = json_decode('[{"1234567":1368356071}]', true);
$array2 = array(1234567 => time(), 7654321 => time());
//echo count($array);
foreach($array2 as $key => $val){
if(!array_key_exists($key,$array[0]))
array_push($array, $key);
}
echo count($array);
答案 1 :(得分:1)
因为$array
是二维数组且$array2
是一维数组,所以请使用下面的代码
<?php
$array = json_decode('[{"1234567":1368356071}]',true);
print_r($array);
$array2 = array(array(1234567 => time()), array(7654321 => time()));
echo count($array);
foreach($array2 as $key){
if(!array_key_exists($key[0],$array[0]))
array_push($array, $key);
}
echo count($array);
&GT;
<强>输出强>
1
2
答案 2 :(得分:0)
关键字isset
比函数array_key_exists
工作得更快
如果您不必从 NULL 告诉未定义,则应使用isset
。
array_key_exists:
array_key_exists($key,$array);
isset:
isset($array[$key]);
在Ideone上测试:
http://ideone.com/m1Do1d
为了防止重复键被推入$ array,它可以使用以下代码:
<?php
$array = json_decode('[{"1234567":1368356071}]', true);
$array2 = array(array(1234567 => time()), array(7654321 => time()));
var_dump(
'$array (before)', $array,
'$array2', $array2
);
foreach ($array2 as $item2) {
foreach ($array as $item) {
if (isset($item[key($item2)])) {
continue 2;
}
}
$array[] = $item2;
}
var_dump(
'$array (after)', $array
);
结果:
string(15) "$array (before)"
array(1) {
[0]=>
array(1) {
[1234567]=>
int(1368356071)
}
}
string(7) "$array2"
array(2) {
[0]=>
array(1) {
[1234567]=>
int(1368650316)
}
[1]=>
array(1) {
[7654321]=>
int(1368650316)
}
}
string(14) "$array (after)"
array(2) {
[0]=>
array(1) {
[1234567]=>
int(1368356071)
}
[1]=>
array(1) {
[7654321]=>
int(1368650316)
}
}