04-數(shù)組

數(shù)組

php的數(shù)組十分特殊症脂,確切的說,它是由鍵值對構(gòu)成的數(shù)組,就類似于C++的map千扔,但是仍然可以用不帶鍵的序列去表示正常的數(shù)組。

創(chuàng)建數(shù)組

  • $arr1 = array(key1=>value1,key2=>value2);
  • $arr2 = array(value1,value2,value3);
  • $arr3 = [key1=>value1,key2=>value2];
  • $arr4 = [value1,value2,value3];

注意點:

  • 其中數(shù)組的key可以寫库正,也可以不寫曲楚。
  • 數(shù)組的key存在時,只能時integet或者string類型褥符,如果是其它類型龙誊,會自動強制轉(zhuǎn)換成integer類型或者string類型,但是value可以是任何類型。當數(shù)組沒有key時喷楣,會默認從下標0開始設(shè)置key
  • 數(shù)組中相同的key的項趟大,后面的會覆蓋前面的。
  • 數(shù)組可以同時存在帶key的項铣焊,和不帶key的項逊朽。不帶key的項,自動為key設(shè)置為int類型,且這個key的數(shù)字是根據(jù)自己左邊第一個key是int來決定的曲伊。假設(shè)這個數(shù)字是1叽讳,那么自己的key就默認是2,假設(shè)左邊沒有一個key是int的坟募,自己的key就是0(從當前位置向左找,不是直接從開頭找)

    $arr1 = array(1,2,3,4);//不帶key的
    print_r($arr1);//0=>1  1=>2  2=>3  3=>4
    $arr2 = array(1=>"d",2=>"z",3=>"p");//全是帶key的
    print_r($arr2);//1=>d 2=>z 3=>p
    $arr3 = array("f1"=>1,"f2"=>2,2=>4,3,10=>"4");//混合存在key和不存在key的
    print_r($arr3);//f1=>1 f2=>2 2=>4 3=>3 10=>4
    /*----------key不是int/string類型的數(shù)組岛蚤,key自動轉(zhuǎn)換為int/string-----------*/
    $arr4 = array(1.99=>1,1.1=>2,3,false=>"4");
    print_r($arr4);//1.99被轉(zhuǎn)換為1,1.1也被轉(zhuǎn)換為1,所以后面的覆蓋前面的1=>2 false被轉(zhuǎn)換為0,所以0=>"4";
    

數(shù)組添加元素

添加元素的格式

  • 數(shù)組變量[key] = value

添加元素的注意點

  • 當數(shù)組中存在對應(yīng)的key時婿屹,那么它的value會被新插入的覆蓋灭美。

    $arr = array(1=>"d",2=>"z");
    print_r($arr)//1=>d 2=>z;
    $arr[1] = "z";
    print_r($arr);//1=>z 2=>z;

數(shù)組刪除元素

刪除元素的格式

  • unset(數(shù)組變量[key]);

刪除元素的注意點

  • 當數(shù)值刪除對應(yīng)的元素時,數(shù)組不會立馬重新排序昂利,原來的int類型的key還是保持原樣届腐。
  • 如果需要讓數(shù)組刪除元素后铁坎,重新排序,需要用array_values(數(shù)組名)去將值拷貝到新數(shù)組里

newarr = array_values(數(shù)組變量);


    $arr = array(1,2,3);
    print_r($arr);
    unset($arr[0]);
    print_r($arr);//1=>2 2=>3
    $newarr = array_values($arr);
    print_r($newarr);//0=>2 1=>3

數(shù)組修改和查找元素

修改元素的格式

  • 數(shù)組變量[key] = value

數(shù)組元素的修改就是利用覆蓋之前對應(yīng)key的值去修改犁苏。

查找數(shù)組的元素

  • echo 數(shù)組變量[key];

    $arr = array(1=>"d",2=>"z");
    print_r($arr)//1=>d 2=>z;
    $arr[1] = "z";
    print_r($arr);//1=>z 2=>z;
    echo($arr[1])//z;

數(shù)組的遍歷

數(shù)組的遍歷我們通常采用for循環(huán)遍歷和php自帶的foreach進行遍歷硬萍。

php也是有數(shù)組指針的,用來指向當前數(shù)組的元素的位置围详,下面列出幾個數(shù)組指針的函數(shù)

key(數(shù)組):獲取當前數(shù)組指針指向的key
current(數(shù)組):獲取當前數(shù)組指針指向的key
reset(數(shù)組):將當前數(shù)組指針指向第一位
next(數(shù)組):將當前數(shù)組指針下移一位
count(數(shù)組):返回數(shù)組元素個數(shù)

有了數(shù)組指針我們才可以用for遍歷關(guān)聯(lián)數(shù)組,下面分別是for和foreach遍歷索引數(shù)組和關(guān)聯(lián)數(shù)組,其中foreach數(shù)組的本質(zhì)就是逐個取出數(shù)組的每一個鍵值對

$arr1 = array(1,2,3,4);//索引數(shù)組
$arr2 = array("aaa"=>"123","bbb"=>"ddd");

//for循環(huán)遍歷索引數(shù)組
for($i=0;$i<count($arr1);$i++)
{
    echo $arr1[$i];
}
//for循環(huán)遍歷關(guān)聯(lián)數(shù)組
reset($arr2);
for($i=0;$i<count($arr1);$i++)
{
    echo key[$arr2]." ".current[$arr2];
    next($arr2);
}
//foreach循環(huán)遍歷索引數(shù)組
foreach($arr1 as $key=>$value)
{
    echo $key." ".$value;
}
//foreach循環(huán)遍歷索引數(shù)組
foreach($arr2 as $key=>$value)
{
    echo $key." ".$value;
}

對比后朴乖,我們可以發(fā)現(xiàn)for遍歷索引數(shù)組方便,遍歷關(guān)聯(lián)數(shù)組還需要數(shù)組指針助赞,因為索引不是從0開始的买羞,而且它遍歷索引數(shù)組,還得要去索引數(shù)組是從0開始連續(xù)的雹食。而foreach進行數(shù)組遍歷畜普,不管索引數(shù)組還是關(guān)聯(lián)數(shù)組都是一套代碼完成的。因此我們更推薦使用foreach進行數(shù)組遍歷

數(shù)組的其它操作

list()將數(shù)組的值賦給多個變量

格式:

$arr = array(1,2,3,4,5);
list[$a,$b,$c] = $arr;//a = 1,b = 2,c = 3

注意點:

數(shù)組必須是索引從0開始的所以數(shù)組

array-values()

array-values(數(shù)組)將數(shù)組的所有值重新保存在一個新數(shù)組里群叶,返回值是一個保存數(shù)據(jù)的數(shù)組吃挑。

注意點:只會保存原來數(shù)組的值,新數(shù)組是一個索引從0開始的遞增數(shù)組街立。

$arr1 = array(2,3,4);
$newarr = array-values($arr1);
print_r($newarr);//0=>2 1=>3,2=>4;

array-keys()

array-keys(數(shù)組)將數(shù)組的所有鍵值key重新保存在一個新數(shù)組里舶衬,返回值是一個保存所有key的數(shù)組。

注意點:只會保存原來數(shù)組的key赎离,新數(shù)組是一個索引從0開始的遞增數(shù)組逛犹。

$arr1 = array("ddd"=>2,0=>3,"fff"=>4);
$newarr = array-keys($arr1);
print_r($newarr);//0=>ddd 1=>0,2=>fff;

array_key_exist()

array_key_exist(key,數(shù)組),用來判斷數(shù)組是否有這個key(鍵值),返回值是bool

$arr1 = array(2,3,4);
echo array_key_exist(1);//true

in_array()

in_array(value,數(shù)組),用來判斷數(shù)組是否有某個value值,返回值是bool

$arr1 = array(2,3,4);
echo array_key_exist(3);//true

array_search();

array_search(value,數(shù)組),用來判斷數(shù)組是否有某個value值,返回值是這個值的key

$arr1 = array(2,3,4);
echo array_search(3);//1

array_count_values();

array_count_values(數(shù)組),用來統(tǒng)計數(shù)組每個值出現(xiàn)的次數(shù),返回的是一個新數(shù)組蟹瘾,保存原數(shù)組每個值出現(xiàn)的次數(shù),因為新數(shù)組的鍵值就是原數(shù)組的value,所以待統(tǒng)計數(shù)組的value圾浅,必須是int/string類型的

$arr = array("aaa",1,"aaa","1","bbb");

$newarr = array_count_values($arr);

print_r($newarr);//arr=>2 1=>2 bbb=>1

array_unique()

array_unique(數(shù)組)掠手,用于刪除數(shù)組里重復出現(xiàn)值的項憾朴,后面重復出現(xiàn)的項會被刪除掉

$arr = array("aaa",1,"aaa","1","bbb");
$newarr = array_unique($arr);
print_r($newarr);//0=>arr,1=>1 2=>bbb;

range(起始,結(jié)束喷鸽,步長)

$arr = range(0,9);//創(chuàng)建一個起始從0到9的數(shù)組
print_r($arr);//0,1,2,3,4,5,6,7,8,9

array_sum(數(shù)組)

array_sum()//返回數(shù)組所有元素值的和
echo array_sum(array(1,2,3));//6    

數(shù)組結(jié)合回調(diào)函數(shù)

通過回調(diào)函數(shù)把數(shù)組結(jié)合起來众雷,可以十分靈活的處理數(shù)組的數(shù)據(jù),既可以改變數(shù)組的數(shù)據(jù)做祝,又可以間接訪問數(shù)組的數(shù)據(jù)砾省。

array_filter(數(shù)組,回調(diào)函數(shù));
array_walk(數(shù)組混槐,回調(diào)函數(shù));

array_filter()用于過濾數(shù)組的元素编兄,其內(nèi)部的回調(diào)函數(shù)是返回值應(yīng)該是bool,返回值是一個數(shù)組,保存篩選后的元素
array_walk()是對數(shù)組每個元素進行不同的操作声登,比較靈活狠鸳。
//尋找偶數(shù)
function even($num)
{
    if($num%2==0)
    {
        return true;
    }else{
        return false;
    }
}
//加法,參數(shù)是飲用傳遞
function add1(&$num)
{
    $num += 1;
}
$arr = array(1,2,3,4);
array_filter($arr,"even");//2,4
array_walk($arr,"add1");
print_r($arr);//2,3,4,5;

數(shù)組的排序

下面數(shù)組的排序都是直接操作原數(shù)組的

sort(數(shù)組);//按照值從小到大排序揣苏,原數(shù)組的鍵值被破壞。鍵值成為從0遞增
rsort(數(shù)組);//按照值從大到小排序件舵,原數(shù)組的鍵值被破壞卸察。鍵值成為從0遞增
$arr = array("bbb"=>10,"cc"=>9);
sort($arr);
print_r($arr);//0=>9 1=>10;


ksort(數(shù)組);//按照key從小到大排序
krsort(數(shù)組);//按照key從大到小排序
$arr = array("bbb"=>10,"cc"=>9);
ksort($arr);
print_r($arr);//bbb=>10 cc=>9;


asort(數(shù)組)//按照值從小到大排序,但是索引不會被破壞
arsort(數(shù)組)//按照值從大到小排序,但是索引不會被破壞
$arr = array("bbb"=>10,"cc"=>9);
asort($arr);
print_r($arr);//cc=>9 bbb=>10;


array_multisort(數(shù)組1,SORT_DESC/SORT_ASC铅祸,數(shù)組2坑质,SORT_DESC/SORT_ASC);//對多個數(shù)組進行值的升序或者降序排序临梗,每個數(shù)組后面的是升序或者降序
$arr1 = array(1,2,3);
$arr2 = array("bb","dd","aaa");
array_multisort($arr1,SORT_DESC,$arr2,SORT_ASC)//對arr1數(shù)組降序涡扼,arr2數(shù)組升序
print_r($arr1);//3 2 1
print_r($arr2);//aaa bb dd

數(shù)組模擬棧

array_push(數(shù)組,值):入棧盟庞,返回數(shù)組當前長度
array_pop():出棧壳澳,返回出棧元素
$arr18 = array(1,2,3);
array_push($arr18,4);
print_r($arr18);//1 2 3 4
array_pop($arr18);
print_r($arr18);//1 2 3

數(shù)組模擬隊列

array_shift(數(shù)組):出隊列,返回出隊列的值
array_push(數(shù)組茫经,元素):入隊列
$arr19 = array(1,2,3);
array_push($arr18,4);
echo array_shift($arr18);//1
print_r($arr19);//2 3 4
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巷波,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子卸伞,更是在濱河造成了極大的恐慌抹镊,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荤傲,死亡現(xiàn)場離奇詭異垮耳,居然都是意外死亡,警方通過查閱死者的電腦和手機遂黍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門终佛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雾家,你說我怎么就攤上這事铃彰。” “怎么了芯咧?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵牙捉,是天一觀的道長。 經(jīng)常有香客問我敬飒,道長邪铲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任无拗,我火速辦了婚禮带到,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘英染。我一直安慰自己揽惹,他們只是感情好晌纫,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著永丝,像睡著了一般锹漱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慕嚷,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天哥牍,我揣著相機與錄音,去河邊找鬼喝检。 笑死嗅辣,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的挠说。 我是一名探鬼主播澡谭,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼损俭!你這毒婦竟也來了蛙奖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤杆兵,失蹤者是張志新(化名)和其女友劉穎雁仲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琐脏,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡攒砖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了日裙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吹艇。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昂拂,靈堂內(nèi)的尸體忽然破棺而出受神,到底是詐尸還是另有隱情,我是刑警寧澤政钟,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布路克,位于F島的核電站,受9級特大地震影響养交,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓢宦,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一碎连、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧驮履,春花似錦鱼辙、人聲如沸廉嚼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怠噪。三九已至,卻和暖如春杜跷,著一層夾襖步出監(jiān)牢的瞬間傍念,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工葛闷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留憋槐,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓淑趾,卻偏偏與公主長得像阳仔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扣泊,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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

  • 前言 每一種編程語言中近范,幾乎都有數(shù)組這種數(shù)據(jù)類型。不過它不僅僅是一種數(shù)據(jù)類型延蟹,同時還是一種基礎(chǔ)的顺又、很常見的數(shù)據(jù)結(jié)構(gòu)...
    程序員網(wǎng)址導航閱讀 293評論 0 0
  • [注] 使用數(shù)組的目的,是為了方便地批量定義變量 [前言] c語言中提供了數(shù)組等孵,可以實現(xiàn)批量地定義相同類型的變量稚照,...
    忘帶充電寶de皮卡丘閱讀 348評論 0 2
  • 一維數(shù)組 數(shù)組名 a稱之為標量,即單一的一個值 b稱之為數(shù)組,因為他是一些值的集合 數(shù)組名和下標一起使用,用于標識...
    DamageDurex閱讀 328評論 0 0
  • 第三章 數(shù)組 數(shù)組是一個可以存儲一組或一系列數(shù)值的變量 一個包含其他數(shù)組的數(shù)組稱為多維數(shù)組。 關(guān)聯(lián)數(shù)組允許使用更...
    梁燁端木閱讀 671評論 0 0
  • JavaScript 的Array可以包含任意數(shù)據(jù)類型俯萌,并通過索引來訪問每個元素果录。 表示方式 獲取數(shù)組的元素個數(shù) ...
    已重置2020閱讀 219評論 0 1