2013-05-12 2 views
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, все еще попадают в массив $ array?Как правильно использовать array_key_exists

Довольно много я пытаюсь предотвратить дубликаты ключей от получения оттолкнулся в $ массив ..

+0

ошибка в коде Еогеасп ($ array2, как $ ключ) {заменить Еогеасп ($ array2 в $ ключ => $ Вэл) { –

ответ

2

Try This

Вы были три проблемы

1) Вы были декодирования массива в stdObject, он должен быть установлен верно, чтобы вернуть его в массив

2) Вы должны loop array as foreach ($ array2 as $ key => $ val)

3) Передача как $ array [0] в функции array_key_exists

$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); 
+0

foreach ($ array2 as $ key => $ val) {похоже, нажатие индекса не на ключ – GameDevGuru

+0

В моем коде была ошибка , Пожалуйста, посмотрите – GameDevGuru

+0

Довольно много я пытаюсь предотвратить дублирование ключей от $ массива. – GameDevGuru

1

Поскольку $array является 2 одномерный массив и $array2 является 1D массив, используйте ниже код

<?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 

Codepad

+1

нажал неправильную кнопку ;-) –

+0

@Yogesh Suthar, как array2 1D, не то же самое, что и массив, но с двумя клавишами? – GameDevGuru

+0

@GameDevGuru Да array2 имеет 2 ключа, но 1 размерный массив. –

0

Ключевое слово isset работает быстрее, чем функция array_key_exists.
Вы должны использовать isset, если вам не нужно указывать Undefined от NULL.

array_key_exists:

array_key_exists($key,$array); 

Исеть:

isset($array[$key]); 

Проверено на Ideone:
http://ideone.com/m1Do1d


Чтобы предотвратить дубликаты ключей от получения оттолкнулся в $ массив, он работает с этот код:

<?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) 
    } 
} 
+0

@CertainN Можете ли вы показать пример, пожалуйста? – GameDevGuru

+0

- это не только проверка того, установлен ли этот индекс? Мне нужно найти массив, чтобы увидеть, существует ли ключ до нажатия – GameDevGuru

+0

. Я очень стараюсь, чтобы дубликаты ключей не попадали в массив $ array. – GameDevGuru

Смежные вопросы