PHP: Найти элемент с определенным значением свойства в массиве - PullRequest
2 голосов
/ 15 июня 2010

Я уверен, что есть простой способ сделать это, но я не могу думать об этом прямо сейчас. Есть ли функция массива или что-то, что позволяет мне искать в массиве и находить элемент с определенным значением свойства? Например:

$people = array(
  array(
    'name' => 'Alice',
    'age' => 25,
  ),
  array(
    'name' => 'Waldo',
    'age' => 89,
  ),
  array(
    'name' => 'Bob',
    'age' => 27,
  ),
);

Как мне найти и получить Уолдо?

Ответы [ 3 ]

1 голос
/ 15 июня 2010

С помощью следующего фрагмента у вас есть общее представление о том, как это сделать:

foreach ($people as $i => $person)
{
    if (array_key_exists('name', $person) && $person['name'] == 'Waldo')
        echo('Waldo found at ' . $i);
}

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

function SearchArray($array, $searchIndex, $searchValue)
{
    if (!is_array($array) || $searchIndex == '')
        return false;

    foreach ($array as $k => $v)
    {
        if (is_array($v) && array_key_exists($searchIndex, $v) && $v[$searchIndex] == $searchValue)
            return $k;
    }

    return false;
}

Ииспользуйте это следующим образом:

$foundIndex = SearchArray($people, 'name', 'Waldo'); //Search by name
$foundIndex = SearchArray($people, 'age', 89); //Search by age

Но следите, чтобы функция могла возвращать 0 и false, что в обоих случаях равно false (используйте что-то вроде if ($ foundIndex! == false) или if ($ foundIndex === false) ).

0 голосов
/ 15 июня 2010
function getCustomSearch($key) {
   foreach($people as $p) {
      if($p['name']==$searchKey) return $p
   }
}

getCustomSearch('waldo');
0 голосов
/ 15 июня 2010
function findByName($array, $name) {
    foreach ($array as $person) {
        if ($person['name'] == $name) {
            return $person;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...