如何正确使用array_key_exists

时间:2013-05-12 11:37:07

标签: php arrays array-push array-key-exists

$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 ..

3 个答案:

答案 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

Codepad

答案 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)
  }
}