note 90577 modified in function.array-search by danbrown

From: 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

« previous php.notes (#153962) next »