2012-02-08 3 views
0

$record_record содержит:Поиск номер в массиве

Array 
(
    [0] => Array 
     (
      [id] => 252 
      [origin] => laptop.me. 
     ) 

    [1] => Array 
     (
      [id] => 255 
      [origin] => hello.me. 
     ) 

    [2] => Array 
     (
      [id] => 254 
      [origin] => intel.me. 
     ) 
) 

мне нужно искать, если 255 будет существовать в массиве. Код ниже не работает.

if (in_array('255', $record_record, true)) { 
    echo "'255' found with strict check\n"; 
} 
else { 
    echo "nope\n"; 
} 

У меня было чувство, потому что это вложенный массив, функция не будет работать. Помоги мне, пожалуйста?

+0

Спасибо за совет. Обновлено. – sg552

+0

Замечания из документов PHP обычно имеют некоторые варианты для всего, что вы могли бы хотеть. http://php.net/manual/en/function.in-array.php#106713 –

+0

Пробовали ли вы какие-либо функции, предлагаемые на http://us.php.net/manual/en/function.array-search .php? – Crontab

ответ

2

Вам нужно сделать что-то вроде этого:

<?php 

    function id_exists ($array, $id, $strict = FALSE) { 
    // Loop outer array 
    foreach ($array as $inner) { 
     // Make sure id is set, and compare it to the search value 
     if (isset($inner['id']) && (($strict) ? $inner['id'] === $id : $inner['id'] == $id)) { 
     // We found it 
     return TRUE; 
     } 
    } 
    // We didn't find it 
    return FALSE; 
    } 

    if (id_exists($record_record, 255, true)) { 
    echo "'255' found with strict check\n"; 
    } else { 
    echo "nope\n"; 
    } 
+0

Большое спасибо за добавленный комментарий. После поиска связанной темы я предполагаю, что у PHP нет встроенной функции поиска. Еще одна вещь, если мне нужно будет использовать строгий, мне просто нужно изменить $ strict на TRUE? Еще раз спасибо. – sg552

+0

Все строгие сравнения - это убедиться, что типы совпадают, а также значение. Итак, со строгими сравнениями, '255! == '255''. Я сделал значение по умолчанию для строгой 'FALSE', что означает, что сравнения по умолчанию будут потеряны - если вы хотите, чтобы они были строгими по умолчанию, просто измените значение FALSE в определении функции на TRUE. – DaveRandom

1

Для этого вам понадобится рекурсивная функция. От elusive:

function in_array_r($needle, $haystack, $strict = true) { 
    foreach ($haystack as $item) { 
     if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) { 
      return true; 
     } 
    } 

    return false; 
} 

Или, если ваша структура массива не изменится, просто написать простой цикл:

function in_2dimensional_array($needle, $haystack, $strict = true){ 
    foreach ($haystack as $item) { 
     if (in_array($needle, $haystack, true)) { 
      return true; 
     } 
    } 

    return false; 
} 
+0

Ссылка на Drekt: http://stackoverflow.com/a/4128377/701049 Редактировать: В этом случае вам действительно не нужен рекурсивный поиск :) – tim

+0

@Alexandrew Да, я был раздираем, был ли это дубликат или нет. Вопрос сформулирован по-другому, поэтому, ради Google, кажется, стоит иметь обоих. Должен ли я сделать цитату более ясной, чем просто связывать имя оригинального автора? EDIT: необходимость в рекурсивном поиске неясна из вопроса. OP никогда не указывает, будет ли поиск всегда находиться в столбце ['id']. Конечно, вы могли бы просто написать цикл (добавлено для ответа). –

+0

Я думаю, что все в порядке, я просто подумал о полной полноте. Я предоставляю прямую ссылку на ответ (который вы получаете, нажимая «link» ниже ответа!) – tim

0

Hacky решение. Кто-то другой опубликует хороший файл с помощью array_map или чего-то подобного.

function in_nested_array($val, $arr) 
{ 
    $matched = false; 
    foreach ($arr AS $ar) 
    { 
     if (in_array($val, $ar, true) 
     { 
      $matched = true; 
      break; 
     } 
    } 
    return $matched; 
} 

if (in_nested_array(255, $record_record)) 
{ 
    // partay 
} 
+0

Я ценю вашу помощь :) – sg552

2

ли что-то вроде:

foreach($record_record as $sub_array){ 
     if (in_array('255', $sub_array, true)) { 
      echo "'255' found with strict check\n"; 
     } 
     else { 
      echo "nope\n"; 
     } 
    } 
+0

Я ценю вашу помощь :) – sg552

0
<?php 
foreach($record_record as $record) { 
    $key = array_search('255', $record); 
    if ($key) { 
    echo "'255' found with strict check\n"; 
    } 
} 
?> 
+0

Я ценю вашу помощь :) – sg552

+0

@ sg552 you'r welcome – bizzr3

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