note 90577 modified in function.array-search by danbrown
| From: | danbrown@php.net | Date: | Wed, 29 Apr 2009 12:52:57 +0000 |
| Subject: | note 90577 modified in function.array-search by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-153962@lists.php.net to get a copy of this message | ||
Can be useful for searching in a multi-dimensional array:
<?php
function array_search_in_level($needle, $haystack, $key, &$result, $searchlevel = 0) {
while(is_array($haystack) && isset($haystack[key($haystack)])) {
if($searchlevel == 0 && key($haystack) == $key && $haystack[$key] == $needle) {
$result = $haystack;
} elseif($searchlevel > 0) {
array_search_in_level($needle, $haystack[key($haystack)], $key, $result, $searchlevel - 1);
}
next($haystack);
}
}
?>
Examples:
1. 2-dimensional array, search by both key and value
$arr1 = array(
1 => array('id' => 1, 'name' => 'Alex', 'gender'
=> 'male'),
...
12 => array('id' => 12, 'name' => 'John',
'gender' => 'male'),
);
<?php array_search_in_level('John', $arr1, 'name', $result, 1); ?>
$result is:
array(
'id' => int 12
'name' => string 'John' (length=4)
'gender' => string 'male' (length=4)
)
2. 3-dimensional array, search by value only:
<?php
$arr2 = array(
1 => array('id' => 1, 'name' => 'Alex', 'gender'
=> 'male'),
/* ... */
12 => array('id' => 12, 'name' => 'John',
'gender' => 'male', 'friends' => array('Helen',
'Julia')),
);
array_search_in_level('Helen', $arr1, 0, $result, 2);
?>
$result is:
array(
0 => string 'Helen' (length=5)
1 => string 'Julia' (length=5)
)
--was--
Can be useful for searching in a multi-dimensional array:
function array_search_in_level($needle, $haystack, $key, &$result, $searchlevel = 0) {
while(is_array($haystack) && isset($haystack[key($haystack)])) {
if($searchlevel == 0 && key($haystack) == $key && $haystack[$key] == $needle) {
$result = $haystack;
} elseif($searchlevel > 0) {
array_search_in_level($needle, $haystack[key($haystack)], $key, $result, $searchlevel - 1);
}
next($haystack);
}
}
Examples:
1. 2-dimensional array, search by both key and value
$arr1 = array(
1 => array('id' => 1, 'name' => 'Alex', 'gender'
=> 'male'),
...
12 => array('id' => 12, 'name' => 'John',
'gender' => 'male'),
);
array_search_in_level('John', $arr1, 'name', $result, 1);
$result is:
array(
'id' => int 12
'name' => string 'John' (length=4)
'gender' => string 'male' (length=4)
)
2. 3-dimensional array, search by value only:
$arr2 = array(
1 => array('id' => 1, 'name' => 'Alex', 'gender'
=> 'male'),
...
12 => array('id' => 12, 'name' => 'John',
'gender' => 'male', 'friends' => array('Helen',
'Julia')),
);
array_search_in_level('Helen', $arr1, 0, $result, 2);
$result is:
array(
0 => string 'Helen' (length=5)
1 => string 'Julia' (length=5)
)
http://php.net/manual/en/function.array-search.php