0.8 PHP 數(shù)組


  • 數(shù)組可以存儲(chǔ)任何數(shù)據(jù)罢坝。
array(1, 5, 1.1, "str", true);
$a=[123,123,213,213,21321,321,3];
  • 鍵名設(shè)定:鍵名可以任意設(shè)定,無(wú)順序搅窿、無(wú)連續(xù)嘁酿。
array(2=>99, 5=>5, 3=>1.1, 0=>true);
  • 分配規(guī)則:在未標(biāo)明鍵名的情況下,在前面最大數(shù)字下標(biāo)+1男应。
array(2=>11, 5, 1=>1.1, 'str', 0=>true);  //下標(biāo)為:2,3,1,4,0
  • 混合下標(biāo):鍵名可以為數(shù)字闹司,也可以字符混用。
array(2=>3, 'dd'=>5, 3=>1.1, 'girl'=>'str', 0=>true);
  • 負(fù)數(shù)下標(biāo):負(fù)數(shù)的下標(biāo)會(huì)被識(shí)別為字符沐飘。
array(2=>1, -1=>true);
  • 小數(shù)下標(biāo):小數(shù)下標(biāo)會(huì)自動(dòng)轉(zhuǎn)換為整數(shù)游桩。
array(2.7=>88, 1.987=>true);   //2=>88, 1=>true
  • bool下標(biāo):自動(dòng)轉(zhuǎn)換成 0牲迫、1
  • 重復(fù)下標(biāo):會(huì)對(duì)前面相同的下標(biāo)進(jìn)行覆蓋借卧。
array(2=>88, 2=>true, 4=>1123);   //2=>true, 1=>1123
  • 數(shù)組分類(lèi)
  • 關(guān)聯(lián)數(shù)組:通常指小標(biāo)為字符串盹憎,并且語(yǔ)義化的數(shù)組。
$person=[
        "name"=>"小花",
        "age"=>18,
        "edu"=>"大學(xué)畢業(yè)",
]
  • 索引數(shù)組:就是指數(shù)組下標(biāo)是從 0 開(kāi)始連續(xù)的數(shù)字下標(biāo)铐刘。
array(9) {
        [0]=>int(121)
        [1]=>int(15)
        [2]=>int(10)
}
  • 數(shù)組層次:
    ◇ 一維數(shù)組:
$arrs=(
        "name"=>"小花",
        "age"=>18,
        "edu"=>"大學(xué)畢業(yè)"
)

◇ 二維數(shù)組:

<?php
$arrs=array(
        "name"=>array("小花","小明","小芳"),
        "age"=>array(17,18,19),
        "edu"=>array("小學(xué)生","中學(xué)生","大學(xué)生")
);
echo "<pre>";
var_dump($arrs);
echo "</pre>";

◇ 多維數(shù)組:在二維數(shù)組的基礎(chǔ)上繼續(xù)延伸...

  • 案例
  • 一維數(shù)組求最大值:
<?php
$arr=[3,5,2,4,5,2,6,4,7,73];
$len=count($arr);    //獲取長(zhǎng)度
$max=$arr[0];        //獲取初值
for($i=0;$i<$len;$i++){
        if($max<$arr[$i]){
            $max=$arr[$i];    //比較求值
        }
}
echo $max;     //73
  • 二維數(shù)組求最大值:
<?php
$arr=[
        [3,6,1,5,1],
        [62,54,1,2,1,2,3],
        [1,23,12,44,23]
];
$max=$arr[0][0];    //獲取初值  
$len=count($arr);   //獲取長(zhǎng)度
for($i=0;$i<$len;$i++){
        $len2=count($arr[$i]);    //獲取子數(shù)組的長(zhǎng)度
        for($j=0;$j<$len2;$j++){  //嵌套循環(huán)
            if($max<$arr[$i][$j]){
                $max=$arr[$i][$j];//比較求值
            }
        }
}
echo $max;    //62

▁ PHP 的數(shù)組陣列陪每,不可以在循環(huán)體直接操作,需要 & 引用符號(hào)镰吵。

數(shù)組的遍歷及原理

遍歷數(shù)組 foreach 的書(shū)寫(xiě)格式:

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement
  • 數(shù)組指針
      每個(gè)數(shù)組內(nèi)部都有一個(gè) "指針"檩禾,用來(lái)決定取值時(shí)獲取的元素,像 foreach 數(shù)組遍歷疤祭,都是依賴(lài) "指針" 完成的盼产。
    piont.png
  • 操作函數(shù)
名稱(chēng) 描述
current() 獲取 當(dāng)前 指向的元素的值
key() 獲取 當(dāng)前 指向的元素的下標(biāo)
next() 將指針移到 下一個(gè)元素,并獲取元素的值
prev() 將指針移到 上一個(gè)元素画株,并獲取元素的值
reset() 將指針移到 第一個(gè)元素辆飘,并獲取元素的值
end() 將指針移到 最后一個(gè)元素,并獲取元素的值
each() 獲取 當(dāng)前 元素的 下標(biāo)和值谓传,然后將指針移動(dòng)到下一個(gè)位置
<?php
$people = array("張三", "李四", "王五", "馬六");
echo current($people) . "<br>";   //獲取當(dāng)前元素值:張三
echo next($people) . "<br>";      //移動(dòng)到下一個(gè)蜈项,并取值:李四
echo current($people) . "<br>";   //獲取當(dāng)前元素值:李四
echo prev($people) . "<br>";      //移動(dòng)到上一個(gè),并取值:張三
echo end($people) . "<br>";       //移動(dòng)到最后续挟,并取值:馬六
echo prev($people) . "<br>";      //移動(dòng)到上一個(gè)紧卒,并取值:王五
echo current($people) . "<br>";   //獲取當(dāng)前元素值:王五
echo reset($people) . "<br>";     //移動(dòng)到開(kāi)始,并取值:張三
echo next($people) . "<br>";      //移動(dòng)到下一個(gè)诗祸,并取值:李四
  • 流程圖


    foreach.png
  • 遍歷數(shù)組:
    1. foreach 語(yǔ)法:
<?php
$arr=[ 3, "dd"=>2, 5,"news"=>45 ];
$max=reset($arr);
$key=0;
foreach ($arr as $k => $v){
        if($v>$max){
            $max=$v;
            $key=$k;
        }
}
echo "最大值為$max"."跑芳,下標(biāo)為$key";

2. for+next 語(yǔ)法:

<?php
$arr=[ 3, "dd"=>2, 5,"news"=>45 ];
$max=reset($arr);
$len=count($arr);
$key=0;
for($i=0;$i<$len;$i++){
        $k=key($arr);
        $v=current($arr);
        if($v>$max){
            $max=$v;
            $key=$k;
        }
        next($arr);
    }
echo "最大值為$max".",下標(biāo)為$key";

3. while+each+list 語(yǔ)法:
◇ each() 函數(shù):可以取得數(shù)組中一個(gè)元素的下標(biāo)和值直颅,并返回一個(gè)新的數(shù)組中博个,新數(shù)組將存儲(chǔ)四個(gè)元素。

<?php
$arr=[ 3, "dd"=>2, 5,"news"=>45 ];
$n1=each($arr);
echo "<pre>";
print_r($n1);
//輸出結(jié)果:
Array  (
        [1] => 3      //對(duì)應(yīng)下標(biāo) 0 的值
        [value] => 3  //對(duì)應(yīng)下標(biāo) 0 的值
        [0] => 0      //對(duì)應(yīng)下標(biāo) 0 的鍵
        [key] => 0  ) //對(duì)應(yīng)下標(biāo) 0 的鍵
echo "</pre>";
$n2=each($arr);
echo "<pre>";
print_r($n2);
echo "</pre>";
//輸出結(jié)果:
Array  (
        [1] => 2      //對(duì)應(yīng)下標(biāo) dd 的值
        [value] => 2  //對(duì)應(yīng)下標(biāo) dd 的值
        [0] => dd     //對(duì)應(yīng)下標(biāo) dd 的鍵
        [key] => dd  )//對(duì)應(yīng)下標(biāo) dd 的鍵

◇ list() 函數(shù):按照索引順序 0功偿、1盆佣、3、4... 取出對(duì)應(yīng)下標(biāo)的值放入變量中械荷。

<?php
$arr=[ 3, 4, 8, 10 ];
list($v1,$vv,$v2,$asd)=$arr;
echo $v1,$vv,$v2,$asd;
         //3  4  8  10

結(jié)合遍歷:

reset($arr);
while(list($k,$v)=each($arr))//非空數(shù)組返回 true
                                 //each 到數(shù)組最后會(huì)返回 false
{
        //這里可以對(duì) $k $v 進(jìn)行操作
}
  • foreach 理解總結(jié)
  • foreach 也是正常的循環(huán)語(yǔ)句共耍,可以使用 breakcontinue吨瞎;
  • 遍歷過(guò)程中變量的傳值方式是值傳遞痹兜;
  • 遍歷過(guò)程中可以認(rèn)為設(shè)定引用傳遞:foreach($arr as $key => &$value){...}
  • 遍歷過(guò)程中對(duì)數(shù)組進(jìn)行了修改、或某些指針型操作颤诀,則當(dāng)前循環(huán)不會(huì)得到體現(xiàn)字旭,即在復(fù)制的數(shù)組上繼續(xù)遍歷(原數(shù)組已經(jīng)修改)对湃;
  • foreach 中如果變量時(shí)引用傳遞,則一定會(huì)是在原數(shù)組上操作谐算。

▁ 數(shù)組的排序可以參考 排序算法熟尉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末归露,一起剝皮案震驚了整個(gè)濱河市洲脂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剧包,老刑警劉巖恐锦,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異疆液,居然都是意外死亡一铅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)堕油,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)潘飘,“玉大人,你說(shuō)我怎么就攤上這事掉缺〔仿迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵眶明,是天一觀的道長(zhǎng)艰毒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)搜囱,這世上最難降的妖魔是什么丑瞧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蜀肘,結(jié)果婚禮上绊汹,老公的妹妹穿的比我還像新娘。我一直安慰自己扮宠,他們只是感情好西乖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著涵卵,像睡著了一般浴栽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上轿偎,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天典鸡,我揣著相機(jī)與錄音,去河邊找鬼坏晦。 笑死萝玷,一個(gè)胖子當(dāng)著我的面吹牛嫁乘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播球碉,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蜓斧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了睁冬?” 一聲冷哼從身側(cè)響起挎春,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎豆拨,沒(méi)想到半個(gè)月后直奋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡施禾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年脚线,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弥搞。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡邮绿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出攀例,到底是詐尸還是另有隱情船逮,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布肛度,位于F島的核電站傻唾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏承耿。R本人自食惡果不足惜冠骄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望加袋。 院中可真熱鬧凛辣,春花似錦、人聲如沸职烧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蚀之。三九已至蝗敢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間足删,已是汗流浹背寿谴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留失受,地道東北人讶泰。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓咏瑟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親痪署。 傳聞我的和親對(duì)象是個(gè)殘疾皇子码泞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 要訪問(wèn)一個(gè)變量的內(nèi)容,可以直接使用其名稱(chēng)狼犯。如果該變量是一個(gè)數(shù)組余寥,可以使用變量名稱(chēng)和關(guān)鍵字或索引的組合來(lái)訪問(wèn)其內(nèi)容。...
    恩德_b0c2閱讀 398評(píng)論 0 0
  • Javascript有很多數(shù)組的方法辜王,有的人有W3C的API劈狐,還可以去MDN上去找罐孝,但是我覺(jué)得API上說(shuō)的不全呐馆,M...
    頑皮的雪狐七七閱讀 4,088評(píng)論 0 6
  • PHP7 已經(jīng)出來(lái)1年了,PHP7.1也即將和大家見(jiàn)面莲兢,這么多好的特性汹来,好的方法,為什么不使用呢改艇,也希望PHP越來(lái)...
    夢(mèng)幻_78af閱讀 2,097評(píng)論 1 10
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)收班。 張土汪:刷leetcod...
    土汪閱讀 12,745評(píng)論 0 33
  • 挑戰(zhàn)365天|正式開(kāi)營(yíng)第一天 文/依依思言 1.我有三個(gè)夢(mèng)想 初識(shí)簡(jiǎn)書(shū)君,是今年9月份谒兄,一個(gè)考上南方醫(yī)科大學(xué)研究生...
    依依思言閱讀 200評(píng)論 5 5