不规则多维数组,获取指定键的值

1、多维数组某个特定键的所有值

//把数组序列化,然后根据序列化结构的特点提取需要的字符串 
function array_get_by_key(array $array, $string){  
    if (!trim($string)) return false;  
    preg_match_all("/\"$string\";\w{1}:(?:\d+:|)(.*?);/", serialize($array), $res);  
    return $res[1];  
}  
$r = ['id'=> 1, 's'=> 23, 'a' => ['s' => 123, [1, 2, 's' => "asdasdgsadggsadg"]]];  
echo '<pre>';  
print_r (array_get_by_key($r, 's'));
//这种方法是通过序列化结构的特点提取需要的字符串,加上正则匹配获取到结果的

2、下面这个方法,采用php的闭包语法。

<?php
$arr = array('id'=> 1, 's'=> 23, 'a' => array('s' => 123, array(1, 2, 's' => "asdasdgsadggsadg"))); 
 
$result = array_filter($arr, function ($var) {   
  $found = false;
  array_walk_recursive($var, function ($item, $key) use (&$found) {  
    $found = $found || $key == "s";
  });
  return $found;
});
var_dump($result);

3、用标准PHP类库SPL里的ArrayIterator类,ArrayIterator类和ArrayObject类,只支持遍历一维数组。与之对应的RecursiveArrayIterator支持遍历多维数组,首先用 RecursiveIteratorIterator生成一个Iterator,然后再对这个Iterator使用 RecursiveArrayIterator。

function searchMultiArray(array $array, $search, $mode = 'key') {
    $res = array();
    foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as $key => $value) {
        if ($search === ${${"mode"}}){
            if($mode == 'key'){
                $res[] = $value;
            }else{
                $res[] = $key;
            }
        }
    }
    return $res;
}
var_dump(searchMultiArray($arr, 's'));

4、分享一个用递归方法实现的函数。

function getArray($array, $index) {
    if (!is_array($array)) return null;
    if (isset($array[$index])) return $array[$index];
    foreach ($array as $item) {
        $return = getArray($item, $index);
        if (!is_null($return)) {
            return $return;
        }
    }
    return null;
}
发布了38 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42260789/article/details/103569440
今日推荐