亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php遍歷數組高級操作詳解

2024-09-04 11:46:23
字體:
來源:轉載
供稿:網友

在php中遍歷數據一般會使用到list,foreach,each其實中一種,但下面的教程可能不會用到,下面我來給各位分別介紹一下遍歷數組高級實例,希望此方法對大家有幫助.

學習程式語言時,總是學學 for,然后再試著用 while 寫出 for 的效果等等的一些練習,來看看沒有 foreach 前,要想要有 foreach 的功能要怎?寫(用 while、list、each 來達成).

在這篇文章看到: PHP的foreach前身寫法,代碼如下:

  1. //舊的寫法 
  2. reset($attributes); 
  3. while (list($key$value) = each($attributes)) { 
  4.     //do something 
  5. }//開源代碼Vevb.com 
  6. //PHP4版本新增 
  7. foreach ($attributes as $key => $value){ 
  8.    //do something 

多維關聯數組排序

PHP提供了一些數組排序的函數,比如sort(), ksort(),和asort(),但是卻沒有提供對多維關聯數組的排序.

比如這樣的數組,代碼如下:

  1. Array 
  2.   [0] => Array 
  3.     ( 
  4.       [name] => chess 
  5.       [price] => 12.99 
  6.     ) 
  7.  
  8.   [1] => Array 
  9.     ( 
  10.       [name] => checkers 
  11.       [price] => 9.99 
  12.     ) 
  13.  
  14.   [2] => Array 
  15.     ( 
  16.       [name] => backgammon 
  17.       [price] => 29.99 
  18.     ) 

要將該數組按照升序排序,你需要自己寫一個函數用于比較價格,然后將該函數作為回調函數傳遞給usort()函數來實現該功能,代碼如下:

  1. function comparePrice($priceA$priceB){ 
  2.     return $priceA['price'] - $priceB['price']; 

usort($games, 'comparePrice');執行了該程序片段,數組就會被排序,結果如下所示:

  1. Array 
  2.   [0] => Array 
  3.     ( 
  4.       [name] => checkers 
  5.       [price] => 9.99 
  6.     ) 
  7.  
  8.   [1] => Array 
  9.     ( 
  10.       [name] => chess 
  11.       [price] => 12.99 
  12.     ) 
  13.  
  14.   [2] => Array 
  15.     ( 
  16.       [name] => backgammon 
  17.       [price] => 29.99 
  18.     ) 

要將該數組按照降序排序,把comparePrice()函數里面的兩個減的數調換位置就可以了.

逆序遍歷數組

PHP的While循環和For循環是遍歷一個數組最常用的方法,但是你怎樣遍歷像下面這個數組呢?代碼如下:

  1. Array 
  2.   [0] => Array 
  3.     ( 
  4.       [name] => Board 
  5.       [games] => Array 
  6.         ( 
  7.           [0] => Array 
  8.             ( 
  9.               [name] => chess 
  10.               [price] => 12.99 
  11.             ) 
  12.  
  13.           [1] => Array 
  14.             ( 
  15.               [name] => checkers 
  16.               [price] => 9.99 
  17.             ) 
  18.         ) 
  19.     ) 

PHP標準庫中有一個對集合的迭代器iterators類,它不僅僅能夠用于遍歷一些異構的數據結構,比如文件系統和數據庫查詢結果集,也可以對一些不知道大小的嵌套數組的遍歷,比如對上面的數組的遍歷,可以使用RecursiveArrayIterator迭代器進行,代碼如下:

  1. $iterator = new RecursiveArrayIterator($games);  
  2. iterator_apply($iterator'navigateArray'array($iterator)); 
  3.  
  4. function navigateArray($iterator) {  
  5.  while ($iterator->valid()) {  
  6.   if ($iterator->hasChildren()) {  
  7.    navigateArray($iterator->getChildren());  
  8.   } else {  
  9.    printf("%s: %s"$iterator->key(), $iterator->current()); 
  10.   }  
  11.   $iterator->next();  
  12.  }   
  13.  
  14. //執行該段代碼會給出以下的結果: 
  15.  
  16. name: Board 
  17. name: chess 
  18. price: 12.99 
  19. name: checkers 
  20. price: 9.99 

過濾關聯數組的結果

假定你得到了如下一個數組,但是你僅僅想操作價格低于$11.99的元素,代碼如下:

  1. Array 
  2.   [0] => Array 
  3.     ( 
  4.       [name] => checkers 
  5.       [price] => 9.99 
  6.     ) 
  7.  
  8.   [1] => Array 
  9.     ( 
  10.       [name] => chess 
  11.       [price] => 12.99 
  12.     ) 
  13.  
  14.   [2] => Array 
  15.     ( 
  16.       [name] => backgammon 
  17.       [price] => 29.99 
  18.     ) 

使用array_reduce()函數可以很簡單的實現,代碼如下:

  1. function filterGames($game){ 
  2.  return ($game['price'] < 11.99); 
  3. $names = array_filter($games'filterGames'); 

array_reduce()函數會過濾掉不滿足回調函數的所有的元素,本例子的回調函數就是filterGames,任何價格低于11.99的元素會被留下,其他的會被剔除,該代碼段的執行結果,代碼如下:

  1. Array 
  2.   [1] => Array 
  3.     ( 
  4.       [name] => checkers 
  5.       [price] => 9.99 
  6.     ) 

對象轉換成數組

一個需求就是將對象轉換成數組形式,方法比你想象的簡單很多,僅僅強制轉換就可以了,例子代碼如下:

  1. class Game { 
  2.  public $name
  3.  public $price
  4.  
  5. $game = new Game(); 
  6. $game->name = 'chess'
  7. $game->price = 12.99; 

print_r(array($game));執行該例子就會產生如下結果:

  1. Array 
  2. [0] => Game Object 
  3.   ( 
  4.     [name] => chess 
  5.     [price] => 12.99 
  6.   ) 

將對象轉換成數組會出現一些不可預料的副作用,比如上面的代碼段,所有的成員變量都是public類型的,但是對于private私有變量的返回結果會變得不一樣,下面是另外一個例子,代碼如下:

  1. class Game { 
  2.  public $name
  3.  private $_price
  4.  
  5.  public function setPrice($price)  { 
  6.   $this->_price = $price
  7.  } 
  8.  
  9. $game = new Game(); 
  10. $game->name = 'chess'
  11. $game->setPrice(12.99); 
  12.  
  13. print_r(array($game)); 
  14.  
  15. //執行該代碼片段: 
  16.  
  17. Array 
  18. [0] => Game Object 
  19.   ( 
  20.     [name] => chess 
  21.     [_price:Game:private] => 12.99 
  22.   ) 

正如你所看到的,為了進行區分,數組中保存的私有變量的key被自動改變了.

數組的“自然排序”

PHP對于“字母數字”字符串的排序結果是不確定的,舉個例子,假定你有很多圖片名稱存放于數組中,代碼如下:

  1. $arr = array
  2.  0=>'madden2011.png'
  3.  1=>'madden2011-1.png'
  4.  2=>'madden2011-2.png'
  5.  3=>'madden2012.png' 
  6. );  

你怎樣對這個數組進行排序呢?如果你用sort()對該數組排序,結果是這樣的,代碼如下 :

  1. Array 
  2.     [0] => madden2011-1.png 
  3.     [1] => madden2011-2.png 
  4.     [2] => madden2011.png 
  5.     [3] => madden2012.png 

有時候這就是我們想要的,但是我們想保留原來的下標怎么辦?解決該問題可以使用natsort()函數,該函數用一種自然的方法對數組排序,代碼如下:

  1. <?php 
  2. $arr = array
  3.  0=>'madden2011.png'
  4.  1=>'madden2011-1.png'
  5.  2=>'madden2011-2.png'
  6.  3=>'madden2012.png' 
  7. ); 
  8.  
  9. natsort($arr); 
  10. echo "<pre>"; print_r($arr); echo "</pre>"
  11. ?> 
  12.  
  13. //運行結果: 
  14.  
  15. Array 
  16.     [1] => madden2011-1.png 
  17.     [2] => madden2011-2.png 
  18.     [0] => madden2011.png 
  19.     [3] => madden2012.png 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人剧情片在线观看| 国产精品露脸自拍| 国产精品成熟老女人| 亚洲一区中文字幕在线观看| 国产精品99久久久久久www| 日韩第一页在线| 一级做a爰片久久毛片美女图片| 亚洲a一级视频| 日韩精品福利网站| 亚洲视频日韩精品| 亚洲娇小xxxx欧美娇小| 亚洲午夜精品久久久久久久久久久久| 国产精品久久久久国产a级| 疯狂欧美牲乱大交777| 久久久久久中文字幕| 在线观看日韩视频| 57pao成人永久免费视频| 国产精品一区二区三区久久| 91黑丝在线观看| 亚洲影影院av| 一区二区三区国产在线观看| 亚洲qvod图片区电影| 成人精品久久一区二区三区| 欧美极品欧美精品欧美视频| 色樱桃影院亚洲精品影院| 在线电影av不卡网址| 国产精品网站大全| 免费不卡欧美自拍视频| 社区色欧美激情 | 91精品视频在线免费观看| 午夜精品久久久久久久99热浪潮| 亚洲天堂久久av| 国产区亚洲区欧美区| 精品福利樱桃av导航| 亚州成人av在线| 中文字幕欧美视频在线| 精品亚洲精品福利线在观看| 欧美黑人极品猛少妇色xxxxx| 精品亚洲一区二区三区四区五区| 丝袜一区二区三区| 2019亚洲日韩新视频| 成人黄色av播放免费| 大胆欧美人体视频| 欧美日韩色婷婷| 欧美成人午夜激情视频| 国产日韩视频在线观看| 2018日韩中文字幕| 国产一区二区三区网站| 亚洲欧美日韩一区二区在线| 日韩精品久久久久久久玫瑰园| 88国产精品欧美一区二区三区| 综合国产在线观看| 国产精品普通话| 国产精品毛片a∨一区二区三区|国| 日本国产一区二区三区| 欧美精品免费看| 欧美老女人性生活| 欧美孕妇与黑人孕交| 成人免费网站在线看| 亚洲欧美制服另类日韩| 亚洲第五色综合网| 亚洲国产欧美一区| 日韩激情视频在线| 欧美日韩激情视频8区| 欧美性色视频在线| 精品国产一区二区三区久久久狼| 日韩精品中文字| 中文字幕日韩电影| 亚洲爱爱爱爱爱| 91精品久久久久久久| 国产成人精品在线| 欧美日韩一区二区免费视频| 亚洲国产精彩中文乱码av| 青草青草久热精品视频在线观看| 国产精品久久婷婷六月丁香| 国产一区欧美二区三区| 亚洲激情自拍图| 亚洲综合在线中文字幕| 国产免费观看久久黄| 国产欧美va欧美va香蕉在| 欧美一级大片在线免费观看| 久久久电影免费观看完整版| 亚洲人成人99网站| 精品亚洲夜色av98在线观看| 亚洲美腿欧美激情另类| 奇米一区二区三区四区久久| 欧美国产中文字幕| 韩国精品美女www爽爽爽视频| www.欧美精品一二三区| 欧洲亚洲在线视频| 亚洲乱码国产乱码精品精| 亚洲自拍小视频免费观看| 欧美理论电影网| 日韩欧美a级成人黄色| 亚洲最大的免费| 国产精品视频一区二区三区四| 欧美多人爱爱视频网站| 国产日韩在线亚洲字幕中文| 国内精品久久久久伊人av| 欧美激情欧美激情在线五月| 91国内免费在线视频| 日韩欧美在线国产| 亚洲精品wwww| 欧美精品情趣视频| 欧美疯狂做受xxxx高潮| 欧美成人午夜免费视在线看片| 日韩美女主播视频| 秋霞午夜一区二区| 亚洲欧美制服中文字幕| 亚洲风情亚aⅴ在线发布| 欧美极品美女视频网站在线观看免费| 日韩欧美一区二区三区久久| 精品自拍视频在线观看| 8090成年在线看片午夜| 91欧美精品午夜性色福利在线| 国产亚洲精品久久久优势| 日韩va亚洲va欧洲va国产| xxxxx91麻豆| 欧美黄色小视频| 日韩美女视频在线观看| 色婷婷综合久久久久| 亚洲国产欧美一区二区丝袜黑人| 久久久中文字幕| 欧美激情视频在线免费观看 欧美视频免费一| 日韩中文在线视频| 色综合久久久久久中文网| 日韩精品在线观| 91精品国产99| 欧美亚洲国产视频小说| 美女久久久久久久久久久| 亚洲男人的天堂网站| 欧美精品video| 国产精品久久久久免费a∨大胸| 亚洲第一av网| 欧美在线日韩在线| 亚洲黄色av女优在线观看| 国产精品一久久香蕉国产线看观看| 美女精品视频一区| 日韩精品久久久久久久玫瑰园| 久久99精品久久久久久青青91| 欧美黑人一级爽快片淫片高清| 亚洲精品国精品久久99热一| 国产一区二区成人| 欧美中文字幕第一页| 久久成人这里只有精品| 亚洲国产日韩欧美在线动漫| 疯狂做受xxxx高潮欧美日本| 国产精品三级网站| 欧美老女人性视频| 国产成人小视频在线观看| 中文字幕日韩在线播放| 欧美激情精品久久久久| 亚洲成年人在线| 精品亚洲va在线va天堂资源站| 欧美高清在线观看| 久久中国妇女中文字幕| 亚洲少妇中文在线| 日韩美女免费视频| 自拍亚洲一区欧美另类| 97精品国产97久久久久久| 夜夜嗨av一区二区三区免费区| 国产成人精品日本亚洲| 亚洲女人被黑人巨大进入al| 亚洲有声小说3d|