php擷取二維數組中key索引值的例子

來源:互聯網
上載者:User


在處理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')
                 
        );
          $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>';
print_r (array_get_by_key($r, 's'));
/*
result:
Array
(
[0] => 23
[1] => 123
[2] => "asdasdgsadggsadg"
)
*/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.