PHP:在数组中查找具有特定属性值的元素

PHP:在数组中查找具有特定属性值的元素

问题描述:

I'm sure there is an easy way to do this, but I can't think of it right now. Is there an array function or something that lets me search through an array and find the item that has a certain property value? For example:

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

How can I find and get Waldo?

With the following snippet you have a general idea how to do it:

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

Then you can make the previous snippet as a general use function like:

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

And use it like this:

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

But watch out as the function can return 0 and false which both evaluates to false (use something like if ($foundIndex !== false) or if ($foundIndex === false)).

function findByName($array, $name) {
    foreach ($array as $person) {
        if ($person['name'] == $name) {
            return $person;
        }
    }
}

function getCustomSearch($key) {
   foreach($people as $p) {
      if($p['name']==$searchKey) return $p
   }
}

getCustomSearch('waldo');