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

これを試して

あなたには3つの問題がありました

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は 2 次元配列であり、$array21D 配列であるため、以下のコードを使用します

<?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_existsUndefinedからNULLを伝える必要がない場合は、
使用する必要があります。isset

array_key_exists:

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 に答える