Поиск номера в массиве - PullRequest
       2

Поиск номера в массиве

0 голосов
/ 08 февраля 2012

$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";
} 

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

Ответы [ 5 ]

2 голосов
/ 08 февраля 2012

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

<?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";
  } 
2 голосов
/ 08 февраля 2012

сделать что-то вроде:

 foreach($record_record as $sub_array){
        if (in_array('255', $sub_array, true)) {
           echo "'255' found with strict check\n";
        }
       else {
           echo "nope\n";
        } 
    }
1 голос
/ 08 февраля 2012

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

 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 голосов
/ 08 февраля 2012
<?php
foreach($record_record as $record) {
  $key = array_search('255', $record);
  if ($key) {
     echo "'255' found with strict check\n";
  }
}
?>
0 голосов
/ 08 февраля 2012

хакерское решение. Кто-то еще напишет хороший, используя 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...