PHP найти значение в многомерном / вложенном массиве - PullRequest
2 голосов
/ 22 июля 2011

Я перебрал сайт и сеть и попробовал различные рекурсивные функции и т.д.

У меня есть массив с именем $meetingArray со следующими значениями;

Array ( 
    [0] => Array ( 
        [Meet_ID] => 9313 
        [Meet_Name] => 456136 
        [Meet_CallInNumber] => 
        [Meet_AttendeeCode] => 
        [Meet_Password] => 
        [Meet_ScheduledDateTime] => 2011-07-18 16:00:00 
        [Meet_ModeratorCode] => 
        [Meet_RequireRegistration] => 0 
        [Meet_CurrentUsers] => 0 
    ) 
    [1] => Array ( 
        [Meet_ID] => 9314 
        [Meet_Name] => 456120 
        [Meet_CallInNumber] => 
        [Meet_AttendeeCode] => 
        [Meet_Password] => 
        [Meet_ScheduledDateTime] => 2011-07-18 16:00:00 
        [Meet_ModeratorCode] => 
        [Meet_RequireRegistration] => 0 
        [Meet_CurrentUsers] => 0 
    ) 
)

У меня также есть переменная с именем $meetID.

Я хочу знать, появляется ли значение в $meetID в [Meet_Name] в массиве, и просто оценить это значение true или false.

Любая помощь очень ценится, прежде чем я застрелюсь:)

Ответы [ 3 ]

4 голосов
/ 22 июля 2011
function multi_in_array($needle, $haystack, $key) {
    foreach ($haystack as $h) {
        if (array_key_exists($key, $h) && $h[$key]==$needle) {
            return true;
        }
    }
    return false;
}

if (multi_in_array($meetID, $meetingArray, 'Meet_Name')) {
    //...
}

Я не уверен, что вы подразумеваете под

$ meetID появляется в [Meet_Name]

, но просто замените условие $h[$key]==$needle чем-то, что соответствуетваши потребности.

0 голосов
/ 22 июля 2011

Для одномерных массивов вы можете использовать array_search().Это может быть адаптировано для многомерных массивов, например так:

function array_search_recursive($needle, $haystack, $strict=false, $stack=array()) {
    $results = array();
    foreach($haystack as $key=>$value) {
        if(($strict && $needle === $value) || (!$strict && $needle == $value)) {
            $results[] = array_merge($stack, array($key));
        }

        if(is_array($value) && count($value) != 0) {
            $results = array_merge($results, array_search_recursive($needle, $value, $strict, array_merge($stack, array($key))));
        }
    }
    return($results);
}
0 голосов
/ 22 июля 2011

Напишите метод примерно так:

function valInArr($array, $field, $value) {
 foreach ($array as $id => $nestedArray) {
  if (strpos($value,$nestedArray[$field])) return $id;
  //if ($nestedArray[$field] === $value) return $id; // use this line if you want the values to be identical
 }
 return false;
}

$meetID = 1234;
$x = valInArr($array, "Meet_Name", $meetID);
if ($x) print_r($array[$x]);

Эта функция оценивает значение true, если запись найдена в массиве, а также позволяет быстро получить доступ к конкретному вложенному массиву, соответствующему этому идентификатору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...