php 多维数组 某个下标,php获取多维数组某个特定键(数组下标)的所有值,具体总结下其余的方法...

本文介绍了四种在PHP中获取多维数组特定键值的方法,包括正则匹配序列化数组、使用闭包、SPL的ArrayIterator类以及递归函数。这些方法旨在提高效率,特别是对于大数组的操作,提供了不同的解决方案。
摘要由CSDN通过智能技术生成

1、项目中经常会用到获取多维数组某个特定键的所有值,经常的做法是循环获取,今天在网上看到一个不用循环获取的办法。

/*

author: yangyu@sina.cn

description: 根据某一特定键(下标)取出一维或多维数组的所有值;不用循环的理由是考虑大数组的效率,把数组序列化,然后根据序列化结构的特点提取需要的字符串

*/

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 = array('id'=> 1, 's'=> 23, 'a' => array('s' => 123, array(1, 2, 's' => "asdasdgsadggsadg")));

echo '

';

print_r (array_get_by_key($r, 's'));

==============================

这种方法是通过序列化结构的特点提取需要的字符串,加上正则匹配获取到结果的=======

2、下面这个方法,采用php的闭包语法。这个要在php5.3以上才可以执行

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值