0
$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 中的 $keys 仍然被推送到 $array?

我几乎是在试图防止重复的键被推入 $array..

4

3 回答 3

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);
于 2013-05-12T11:42:18.080 回答
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);

?>

输出

1
2

键盘

于 2013-05-12T11:41:02.657 回答
0

关键字的isset工作速度比函数快array_key_exists。如果您不必从NULL中区分Undefined
,则 应该使用。isset

数组键存在:

array_key_exists($key,$array);

伊塞特:

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)
  }
}
于 2013-05-12T11:58:51.760 回答