php怎么从数组中提取指定多个键对应的值
阅读(1699)
2021-01-12
php内置的数组核心函数包含了常用的大部分功能,有时候我们需要进行自定义封装。那么如何从一维或二维数组中提取多个指定的键中的值呢?
提取数组指定多个键的值,例如:
$arr = [ 1=>'张三', 2=>'李四', 3=>'王五' ];
提取1,3键的值,输出:
Array ( [1] => 张三 [3] => 王五 )
如果不用for只用内置函数能不能实现呢?
那应该也是可以的,但性能方面没普通foreach那么高。该方式是将提取的键交互键和值,再在数组中只比较键名返回交集。
array_intersect_key($arr, array_flip([1,3]))
自定义封装(适应一二维数组):
/** * 获取键对应的值 * @param array $array 源数组 * @param array $keys 要提取的键数组 * @param string $index 二维组中指定提取的字段(唯一) * @return array */ function array_keys_search($array, $keys, $index=''){ if(empty($array)) return $array; if (!empty($index) && count($array) != count($array, COUNT_RECURSIVE)) $array = array_column($array, null, $index); $list = array(); foreach ($keys as $key) { if (isset($array[$key])) $list[$key] = $array[$key]; } return $list; }
调用:
//一维数组 $arr = [ 1=>'张三', 2=>'李四', 3=>'王五' ]; $arr1 = array_keys_search($arr, [1,3]); print_r($arr1); //二维数组 $arr = [ 0=>array( 'id'=>1, 'name'=>'张三' ), 1=>array( 'id'=>2, 'name'=>'李四' ), 2=>array( 'id'=>3, 'name'=>'王五' ) ]; $arr2 = array_keys_search($arr, [1,3], 'id'); print_r($arr2);
输出:
//一维数组 Array ( [1] => 张三 [3] => 王五 ) //二维数组 Array ( [1] => Array ( [id] => 1 [name] => 张三 ) [3] => Array ( [id] => 3 [name] => 王五 ) )
原创文章,转载请注明出处:https://www.weizhixi.com/article/109.html