Php ajax inserch,PHP: array_search - Manual

方权
2023-12-01

Despite PHP's amazing assortment of array functions and juggling maneuvers, I found myself needing a way to get the FULL array key mapping to a specific value. This function does that, and returns an array of the appropriate keys to get to said (first) value occurrence.

function array_recursive_search_key_map($needle, $haystack) {

foreach($haystack as $first_level_key=>$value) {

if ($needle === $value) {

return array($first_level_key);

} elseif (is_array($value)) {

$callback = array_recursive_search_key_map($needle, $value);

if ($callback) {

return array_merge(array($first_level_key), $callback);

}

}

}

return false;

}

usage example:

-------------------

$nested_array = $sample_array = array(

'a' => array(

'one' => array ('aaa' => 'apple', 'bbb' => 'berry', 'ccc' => 'cantalope'),

'two' => array ('ddd' => 'dog', 'eee' => 'elephant', 'fff' => 'fox')

),

'b' => array(

'three' => array ('ggg' => 'glad', 'hhh' => 'happy', 'iii' => 'insane'),

'four' => array ('jjj' => 'jim', 'kkk' => 'kim', 'lll' => 'liam')

),

'c' => array(

'five' => array ('mmm' => 'mow', 'nnn' => 'no', 'ooo' => 'ohh'),

'six' => array ('ppp' => 'pidgeon', 'qqq' => 'quail', 'rrr' => 'rooster')

)

);

$search_value = 'insane';

$array_keymap = array_recursive_search_key_map($search_value, $nested_array);

var_dump($array_keymap);

// Outputs:

// array(3) {

// [0]=>

//  string(1) "b"

//  [1]=>

//  string(5) "three"

//  [2]=>

//  string(3) "iii"

//}

----------------------------------------------

But again, with the above solution, PHP again falls short on how to dynamically access a specific element's value within the nested array. For that, I wrote a 2nd function to pull the value that was mapped above.

function array_get_nested_value($keymap, $array)

{

$nest_depth = sizeof($keymap);

$value = $array;

for ($i = 0; $i < $nest_depth; $i++) {

$value = $value[$keymap[$i]];

}

return $value;

}

usage example:

-------------------

echo array_get_nested_value($array_keymap, $nested_array);   // insane

 类似资料:

相关阅读

相关文章

相关问答