數組與數組遍歷

来源:http://www.cnblogs.com/cyfm/archive/2016/08/22/5794171.html
-Advertisement-
Play Games

斷斷續續地學習了php有一段時間了,總是不能很好地理解,如今把數組和遍曆數組整理出來。 從基礎開始說起: php數組分為索引數組,和關係型數組, 索引數組就是下標從0,1,2,3,4...開始,而關係型數組則非,理解為帶key的(key為鍵) 開始寫一個數組: 當然也可以這樣寫: 現在來遍歷這個數組 ...


  斷斷續續地學習了php有一段時間了,總是不能很好地理解,如今把數組和遍曆數組整理出來。

 

  從基礎開始說起:

  php數組分為索引數組,和關係型數組

  索引數組就是下標從0,1,2,3,4...開始,而關係型數組則非,理解為帶key的(key為鍵)

 

 開始寫一個數組:

$userNane = array('陳雲','羅鑫','袁修成');

 當然也可以這樣寫:

    $userNane[0] = '陳雲';

    $userNane[1] = '羅鑫';

    $userNane[2] = '袁修成';

 

現在來遍歷這個數組

for($i = 0;$i<2;$i++){
        echo $userNane[$i]; 
};
//or

for($i = 0;$i<count($userNane);$i++){
/**利用count()函數來遍曆數組的元素個數**/ 
    echo $userNane[$i]."<br />"; 
};

 

此時如果數組的下標如果不是從0開始(非索引數組),那麼單單隻靠for迴圈和count()是沒用的,此時我們的好朋友foreach()就來了。

 

foreach ($userNane as $key => $value) {
   echo $key.
'------'.$value."<br />";
}

$key代表鍵值(就=也就是類似於索引下標)$value代表鍵值(下標)的值,
$key與$value是可以隨意更變名字的,只是約定俗成用這兩個變數進行表示

 

除了foreach()外我們還有一個好朋友也可以來遍曆數組,那就是each()

 

<meta charset="UTF-8">
<?php
    $userNane['陳雲'] = 19;

    $userNane['羅鑫'] = 21;

    $userNane[''] = 11;

    $a=each($userNane);     //指針下移
    echo $a["key"].'----'.$a["value"].'<br />';

    $a=each($userNane);
    echo $a["key"].'----'.$a["value"].'<br />';

    $a=each($userNane);
    echo $a["key"].'----'.$a["value"].'<br />';


    /*while (!!$a=each($userNane)) {         
    //根據while迴圈判斷,條件內為真則繼續執行迴圈體,為假則退出迴圈,兩個!!將數組轉化為布爾值,存在則代表 1
        echo $a["key"].'----'.$a["value"].'<br />';
    }*/

    //each()函數返回的是一個數組

    //each後所在數組的“每一個”鍵值會被重新包裝成一個新的數組,裡面有四條數據,key and value,0 and 1

    //each完一次後指針下移一位,預設開始是第一位,也就是指向數組的第二條鍵值對,第二條鍵值對被重新包裝秤數組

?>

 

關於each()介紹看註釋就明白了,each()完數組,數組裡的每一個元素(鍵值對)都會被重新包裝成一個新的數組,裡面有四條數據。

但是這樣的遍歷太麻煩了,又相當的low..

此時each()的好朋友list()登場啦,首先介紹一下list():

$userNane = array(1,2,3);

    list($a,$b,$c) = $userNane;

    echo $a;  //1

為什麼列印出1呢,

是這樣子的,list()函數將數組中的賦給一些變數,對應著(按照數組循序)把$userNane數組裡的元素分別賦值給$a,$b,$c

 

此時理解了list(),配上它的好朋友each()就能很便捷地遍曆數組了

$userNane['陳雲'] = 19;

$userNane['羅鑫'] = 21;

$userNane[''] = 11;

list($name,$age) = each($userNane);

    echo $name;  //陳雲
    echo $age;  //19


list($name,$age) = each($userNane);


  echo $name; //羅鑫
  echo $age; //21

 

 

因為each完後的數組里的元素被重新包裝成一個新的數組,每個新的數組有四條數據,

此時每個數據有兩個對應的key and value,此時key,value不能用,但是 0 和 1 就派上用場了,

借用它把$userNane里的新元素數組裡的0(key)賦給$name身上,1(value)賦值給$age身上

 

因為each()完後數組指針將下移一位,如果在繼續list--each的話就會列印出我的朋友袁修成的信息,

此時我想重新列印第一個,則要用到reset()函數了,它的作用是將數組指針重置到第一位

list($name,$age) = each($userNane);
    echo $name;  //陳雲
    echo $age;  //19

    list($name,$age) = each($userNane);
    echo $name;  //羅鑫
    echo $age;  //21


    reset($userNane);
list($name,$age)
= each($userNane); echo $name; //陳雲 echo $age; //19

 

到這裡介紹一下兩個好用的數組函數:

<meta charset="UTF-8">
<?php
    $number = array(2,5,1,6,4,1,2,6);

    $newNumber = array_unique($number);

    //array_unique移除數組中重覆的值,並且當時就創建了一個新的數組,
    //新的數組數據原封不動,老的數組就已經移除掉了重覆的值

    print_r($newNumber);



    $number = array("陳雲"=>12,"羅鑫"=>18);

    var_dump(array_flip($number));

    //array_flip()交換數組中的鍵和值

    
?>

具有作用看註釋~

太晚了,人有點累了,不不不,我親愛的二維數組還沒遍歷呢,怎能睡覺呢,不可以!!!

看代碼:

<meta charset="UTF-8">
<?php
	//遍歷二位數組
	$food = array(
			array('蘋果','香蕉','梨子'),
			array('雞肉','豬肉','牛肉'),
			array('脈動','快線','果粒橙'),
		);

	for ($i=0; $i <count($food); $i++) { 
		for ($j=0; $j <count($food[$i]);$j++) { 
			echo $food[$i][$j].'|';   //數組裡的 第i個數組 中的 第j個元素,這樣理解第二維的數組
		}

		echo "<br />";
	}

	
?>

  

二維數組是啥?這裡你可以把他理解為數組裡的數組,上述代碼就是數組裡有三個數組。

此時問題來了,要是帶有鍵值對二維數組呢?如何讓遍歷。

見代碼:

    //遍歷二位數組帶key的
    $food = array(
            array('產品'=>'蘋果','價格'=>'12','口味'=>''),
            array('產品'=>'雞肉','價格'=>'13','口味'=>''),
            array('產品'=>'脈動','價格'=>'14','口味'=>'')
        );

    //利用 foreach() 來遍歷

    for ($i=0; $i <count($food); $i++) { 
        foreach ($food[$i] as $key => $value) {
            //echo $food[$i][$key].'|';   //只獲取到數組裡鍵 對應的值
            echo $key.'---'.$value;   //列印出了二維數組的鍵and值
        }

        echo "<br />";
    }

 

看註釋就一目瞭然啦,除了foreach() 來遍歷,我們的情侶搭檔list---each也是可以實現的

見代碼:

    //遍歷二位數組帶key的
    $food = array(
            array('產品'=>'蘋果','價格'=>'12','口味'=>''),
            array('產品'=>'雞肉','價格'=>'13','口味'=>''),
            array('產品'=>'脈動','價格'=>'14','口味'=>'')
        );


    //利用 list--->each() 來遍歷

    for ($i=0; $i <count($food); $i++) { 
        while ( list($key,$value) = each($food[$i])) {    //each後的數組拆分賦給list()里的變數($key,$value)
            echo $key.'---'.$value.'|';   //列印出了二維數組的鍵值
        }

        echo "<br />";
    }

 

 

到此,遍歷就算是結束啦~

如有錯誤,歡迎指針~

麽麽噠,睡覺去鳥...

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原文地址:http://ncforest.blog.163.com/blog/static/295626642007551417331/ 1.sudo的配置文件是/etc/sudoers ,我們可以用他的專用編輯工具visodu ,此工具的好處是在添加規則不太準確時,保存退出時會提示給我們錯誤信息; ...
  • 摘自:http://www.apelearn.com/bbs/thread-7467-1-1.html 一. 使用 su 命令臨時切換用戶身份 1、su 的適用條件和威力 su命令就是切換用戶的工具,怎麼理解呢?比如我們以普通用戶beinan登錄的,但要添加用戶任務,執行useradd ,beina ...
  • kali的openvas安裝 留下筆記,以便下次再查開始在kali找openvas,竟然kali不自帶,害的要下載。 apt-get updateapt-get dist-upgradeapt-get install openvas (我記得大約要下600M左右)安裝完後openvas-setupo ...
  • 背水一戰 Windows 10 之 控制項(文本類): RichTextBlock, RichTextBlockOverflow, RichEditBox ...
  • 本篇文章版權歸博客園和作者吳雙本人共同所有,轉載和爬蟲請註明原文系列地址http://www.cnblogs.com/tdws/tag/NoSql/ 本人之前有篇文章,講到了redis主從複製,讀寫分離。然而留下的問題是當主伺服器掛了,我們就無法向客戶端提供任何服務了呀,這樣的方案,就不能稱之為高可 ...
  • 原文網址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 語言編寫的TCP/UDP通信框架 作者是英國人 以前是收費的 目前作者已經開源 開源地址是:https://github.com/MarcFletcher/NetworkComms.Net 這 ...
  • 在C#4.0中,最核心的特性莫過於動態類型的引入。 1、動態類型簡介 一直在強調C#是一門靜態類型的語言,因為它在定義變數時要明確給出變數的類型。例如在int i=5;這樣的代碼中,int就是變數i的類型,如果定義變數時沒有明確指定變數的類型,則這樣的代碼是通過不了編譯的。 在C#4.0中,微軟引入 ...
  • 本文主要介紹cyq.data orm 框架中的log和syslogs兩個類的用法,詳情如下...... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...