二維數組中一般會有多個key了,如果我們要獲得指定key的值可以和小編一起來看一篇php獲取二維數組中key鍵值的例子,希望文章能夠幫助到各位朋友.
在處理php數組的時候,有一種需求特別的頻繁,如下二維數組:
- $arr = array(
- 1=>array(
- 'id' => 5,
- 'name' => '張三'
- ),
- 2=>array(
- 'id' => 6,
- 'name' => '李四'
- )
- );
目的就是要取到key為name的集合,得到這個結果:
- $arr2 = array(
- 0=>'張三',
- 1=>'李四'
- );
這里有幾種方法:
1:最簡單的,foreach遍歷數組:
- foreach ($arr as $key => $value) {
- $arr2[] = $value['name'];
- }
2:代碼量稍微少一點的代碼,使用了array_map這個php方法:
$arr2 = array_map('array_shift',$arr);
意為把$arr數組的每一項值的開頭的值移出,并返回被移出的每一項值中被移出的值,注意此時新數組$arr2的鍵仍是原數組$arr的鍵
2.1:在方法2的基礎上,可以稍微開一下腦洞,如果需要獲取的是二維數組的每一項的開頭列或結尾列,也可以這樣做:
$arr2 = array_map('end',$arr);
哈哈,也是很方便的
3:還可以使用array_reduce方法,不過代碼略多,不過這個方法的想象空間(針對別的數組取值操作)還是蠻大的:
$arr2 = array_reduce($arr, create_function('$result, $v', '$result[] = $v["name"];return $result;'));
array_reduce方法用回調函數迭代地將對數組的值進行操作,而create_function用于一個匿名方法做回調用,這個匿名方法的參數$result為上一次迭代產生的值,$v是當前的值,內部實現既為獲取到數組$arr每一項的”name”的值并push到新$result數組;
4:最后這個終極方法實在是太爽了,一個方法就搞定,而且非常靈活:
$arr2 = array_column($arr, 'name');
第二個參數為想要獲取的那一列的鍵名,是不是很方便呢,不過這個方法有個限制,就是php版本必須 >= 5.5.0,在陳舊項目中使用這個方法還是得斟酌一下哈
隨機獲取二維數組中的一個值.
- $arr1 = array(
- 'p1'=>array('ky_d'=>'福建省泉州市豐澤區華大街道1','ky_s'=>'350503005'),
- 'p2'=>array('ky_d'=>'福建省泉州市豐澤區華大街道2','ky_s'=>'350503006'),
- 'p3'=>array('ky_d'=>'福建省泉州市豐澤區華大街道3','ky_s'=>'350503007') //Vevb.com
- );
- $temp = array_rand($arr1,1);
- // print_r($temp);
- echo $arr1[$temp]['ky_d'].':'.$arr1[$temp]['ky_s'];
獲取一維或多維數組某個特定鍵(數組下標)的所有值.
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 '<pre>'; //Vevb.com
- print_r (array_get_by_key($r, 's'));
- /*
- result:
- Array
- (
- [0] => 23
- [1] => 123
- [2] => "asdasdgsadggsadg"
- )
- */
新聞熱點
疑難解答