php獲取多維數組某個特定鍵(數組下標)的所有值,具體總結下其余的方法


 

  1. <span style="color:rgb(68,68,68); font-family:'Lucida Grande',Verdana,'Bitstream Vera Sans',Arial,sans-serif; font-size:14px; line-height:24px">1、項目中經常會用到獲取多維數組某個特定鍵的所有值,經常的做法是循環獲取,今天在網上看到一個不用循環獲取的辦法。</span>  
  1. /*  
  2. author: yangyu@sina.cn  
  3. description: 根據某一特定鍵(下標)取出一維或多維數組的所有值;不用循環的理由是考慮大數組的效率,把數組序列化,然后根據序列化結構的特點提取需要的字符串  
  4. */    
  5. function array_get_by_key(array $array, $string){    
  6.     if (!trim($string)) return false;    
  7.     preg_match_all("/\"$string\";\w{1}:(?:\d+:|)(.*?);/", serialize($array), $res);    
  8.     return $res[1];    
  9. }    
  10.     
  11. $r = array('id'=> 1, 's'=> 23, 'a' => array('s' => 123, array(1, 2, 's' => "asdasdgsadggsadg")));    
  12. echo '<pre>';    
  13. print_r (array_get_by_key($r, 's'));  


==============================這種方法是通過序列化結構的特點提取需要的字符串,加上正則匹配獲取到結果的=======

2、下面這個方法,采用php的閉包語法。這個要在php5.3以上才可以執行

 

  1. <?php  
  2. $arr = array('id'=> 1, 's'=> 23, 'a' => array('s' => 123, array(1, 2, 's' => "asdasdgsadggsadg")));   
  3.   
  4. $result = array_filter($arr, function ($var) {     
  5.   $found = false;  
  6.   array_walk_recursive($var, function ($item, $key) use (&$found) {    
  7.     $found = $found || $key == "s";  
  8.   });  
  9.   return $found;  
  10. });  
  11.   
  12. var_dump($result);  


3、用 標准PHP類庫SPL里的ArrayIterator類,ArrayIterator類和ArrayObject類,只支持遍歷一維數組。與之對應的 RecursiveArrayIterator支持遍歷多維數組,首先用 RecursiveIteratorIterator生成一個Iterator,然后再對這個Iterator使用 RecursiveArrayIterator。貼代碼:



 

  1. function searchMultiArray(array $array, $search, $mode = 'key') {  
  2.     $res = array();  
  3.     foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as $key => $value) {  
  4.         if ($search === ${${"mode"}}){  
  5.             if($mode == 'key'){  
  6.                 $res[] = $value;  
  7.             }else{  
  8.                 $res[] = $key;  
  9.             }  
  10.         }  
  11.     }  
  12.     return $res;  
  13. }  
  14.   
  15. var_dump(searchMultiArray($arr, 's'));  


4、分享一個用遞歸方法實現的函數

 

    1. function getArray($array, $index) {  
    2.     if (!is_array($array)) return null;  
    3.     if (isset($array[$index])) return $array[$index];  
    4.     foreach ($array as $item) {  
    5.         $return = getArray($item, $index);  
    6.         if (!is_null($return)) {  
    7.             return $return;  
    8.         }  
    9.     }  
    10.     return null;  
    11. }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM