
批改狀態(tài):合格
老師批語(yǔ):這種遞歸處理, 理解起來(lái)是有點(diǎn)難度, 一時(shí)難以理解正常, 我剛學(xué)的時(shí)候也和你一樣, 等以后接觸幾個(gè)實(shí)際應(yīng)用場(chǎng)景就好了
<?php
//count統(tǒng)計(jì)數(shù)組成員數(shù)量(count不單可以統(tǒng)計(jì)數(shù)組,還可以統(tǒng)計(jì)很多東西)
$arr=[1,2,3,4,5,6,7,8,9,1,1];
echo count($arr);
// for($i=0;$i<=count($arr);$i++){
// echo ($i+1),'<br>';
// }
echo '<hr>';
//array_count_values — 統(tǒng)計(jì)數(shù)組中所有的值出現(xiàn)的次數(shù)(聽(tīng)其名知其意‘?dāng)?shù)組_統(tǒng)計(jì)_值’)
printf('<pre>%s</pre>',print_r(array_count_values($arr),true));
//結(jié)果為1值=3次
//如果需要進(jìn)行數(shù)組計(jì)算,下面出現(xiàn)兩個(gè)字符串,php7將解析為0.
$arr=[1,2,3,'php7','7php',5,8];
//array_sum為數(shù)組相加求和
//array_product為數(shù)組相乘求積
echo array_sum($arr).'===='.array_product($arr);
<?php
// 棧與隊(duì)列
// 棧: 后進(jìn)先出, 最后進(jìn)入的最先出來(lái), LIFO, 添加與刪除受限,只允許在一端進(jìn)行
// 隊(duì)列: 先進(jìn)先出, 最先插入的數(shù)據(jù)最先出來(lái), FIFO, 添加與刪除允許在二端進(jìn)行
//1,棧:尾部添加/刪除
$i='php';
$v=[66,55,33];
$stack=['name','email'];
//array_push — 將一個(gè)或多個(gè)單元壓入數(shù)組的末尾(入棧)
array_push($stack,$i,$v);//后添加后打印
printf('<pre>%s</pre>',print_r($stack,true));
//array_pop返回出棧的元素
//array_pop — 將數(shù)組最后一個(gè)單元彈出(出棧)
//簡(jiǎn)單的說(shuō)就是把最后條添加的數(shù)組給刪掉。
array_pop($stack);
//結(jié)果是$v不會(huì)被打印出來(lái)
printf('<pre>%s</pre>',print_r($stack,true));
echo '<hr>';
//2,棧:頭部刪除/修改
//array_unshift — 在數(shù)組開(kāi)頭插入一個(gè)或多個(gè)單元
//原理同上,只是位置發(fā)生了變化。
array_unshift($stack,$i,$v);//后添加先打印
printf('<pre>%s</pre>',print_r($stack,true));
//返回元素array_shift(同上返回一樣)
array_shift($stack);
printf('<pre>%s<pre>',print_r($stack,true));
echo '<hr>';
//隊(duì)列操作(就是棧操作的結(jié)合)
//尾進(jìn)+頭出(array_push + array_shift)
//這里需要注意的是:添加的東西按順序排列
$i='name';
$v='NET2.0';
$queue=['php',100];
array_push($queue,$i,$v);
//需要輸出則是一個(gè)一個(gè)echo輸出
echo array_shift($queue);
//printf('<pre>%s</pre>',print_r($queue,true));
echo '<br>';
//頭進(jìn) + 尾出 (array_pop + array_unshift)原理同上。只是換了位置
array_unshift($queue,$i,$v);
echo array_pop($queue);
<?php
//排序
$arr=[10,20,'PHP','100','百度',10=>'html',30,'7php','7html','NET2'];
//先打印原看看他的數(shù)組
printf('<pre>%s</pre>',print_r($arr,true));
//開(kāi)始:
//1,升序(說(shuō)明:從小排到大。如果出現(xiàn)字符串和數(shù)字同時(shí)出現(xiàn),會(huì)先排字符串,原因是字符串解析成數(shù)字是0.同時(shí)重置“鍵”的值)
//sort — 對(duì)數(shù)組排序(重置索引)
sort($arr);
printf('<pre>%s</pre>',print_r($arr,true));
$arr=[10,20,'PHP','100','百度',10=>'html',30,'7php','7html','NET2'];
//asort();(索引不變)!a=asoc
asort($arr);
printf('<pre>%s</pre>',print_r($arr,true));
echo '<hr>';
//2,降序(原理同上取反)
rsort($arr);//重置索引
arsort($arr);//索引不變
echo '<p>鍵名排序</p>';
//鍵名排序
$arr=[7=>10,20,'PHP','100','百度',10=>'html',30,'7php','7html',3=>'NET2'];
//ksort — 對(duì)數(shù)組按照鍵名排序(鍵名升序)
ksort($arr);
printf('<pre>%s</pre>',print_r($arr,true));
//krsort 降序
krsort($arr);
printf('<pre>%s</pre>',print_r($arr,true));
echo '<p>自定義值升序排序</p>';
//usort — 使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的值進(jìn)行排序
$arr=[10,2,0,50,100,1.2];
usort($arr,function($a,$b){
//$a-$b表示,需要在數(shù)組中的“值”兩個(gè)兩個(gè)取出來(lái)進(jìn)行運(yùn)算。如果遇到非數(shù)字,則報(bào)錯(cuò)。
//注意:運(yùn)算符是“-”
return $a-$b;
});
printf('<pre>%s</pre>',print_r($arr,true));
echo '<p>自定義值降序</p>';
//自定義降序只需要把取出來(lái)的兩個(gè)值對(duì)調(diào)過(guò)來(lái)運(yùn)算即可。
usort($arr,function($a,$b){
return $b-$a;
});
printf('<pre>%s</pre>',print_r($arr,true));
echo '<hr>';
echo '<p>自然升序排序</p>';
$arr=[10,2,0,'img31.png',50,'img22.png',100,1.2];
natsort($arr);
//也是由數(shù)組的值進(jìn)行排序的(索引不變)
var_dump($arr);//打印結(jié)果
printf('<pre>%s</pre>',print_r($arr,true));
echo '<p>亂序(隨機(jī)排序)</p>';
//shuffle — 將數(shù)組打亂
//索引重置,值隨機(jī)排序
shuffle($arr);
printf('<pre>%s</pre>',print_r($arr,true));
echo '<hr>';
echo '<p>鍵和值交換排序</p>';
//array_flip — 交換數(shù)組中的鍵和值
//注意:array_flip():只能翻轉(zhuǎn)字符串和整數(shù)值!
$arr=[10=>1,30=>2,'name'=>'admin','email'=>'123qq.com'];//這樣做是有問(wèn)題的。因?yàn)轭?lèi)型沒(méi)有統(tǒng)一
// $arr=['name'=>'user','email'=>'123qq.com'];//沒(méi)問(wèn)題
// $arr=['id'=>'y','total'=>'e'];
//注意下面應(yīng)該是$arr=@array_flip()而不是跟上面那樣直接寫(xiě)了。
$arr=@array_flip($arr);
printf('<pre>%s</pre>',print_r($arr,true));
<?php
//數(shù)組查詢與替換
//array_slice — 從數(shù)組中取出一段
//支持正數(shù)和負(fù)數(shù)。正數(shù)就是從左到右,負(fù)數(shù)就從右到左
$arr=['id'=>10,'account'=>'admin','name'=>'管理員','password'=>'123456','qq'=>'123456','tel'=>'10010'];
$res=array_slice($arr,0,2);
//(1,-1)表示,從索引1開(kāi)始取,去除右邊的-1個(gè)索引的數(shù)值
$res1=array_slice($arr,1,-1);
//(-3,3)表示:從右邊-3的索引開(kāi)始取數(shù)組,取3位。
$res2=array_slice($arr,-3,3);
//echo $res,$res1;
$arr1=print_r($res,true);
$arr2=print_r($res1,true);
$arr3=print_r($res2,true);
//刪除,替換,添加數(shù)組成員array_splice()同樣支持負(fù)數(shù)
//刪除
$delete=array_splice($arr,-2,1);
$delete1=print_r($delete,true);//輸出被刪除元素。
//$delete1=print_r($arr,true);//除了別刪除元素,其他輸出
//刪除替換。。可以刪除多個(gè)只替換一個(gè)。也是可以的
$replace=array_splice($arr,1,3,['super','超級(jí)管理員']);
$replace1=print_r($arr,true);
//添加($arr,索引位置,0:表示,不刪除。['xx'=>xx]:表示從索引幾的位置開(kāi)始添加需要數(shù)據(jù)
$add=array_splice($arr,-2,0,['email'=>'123qq.com']);
$add1=print_r($arr,true);
printf('<pre>%s%s%s<p>刪除,替換,添加數(shù)組</p>%s%s%s</pre>',$arr1,$arr2,$arr3,$delete1,$replace1,$add1);
echo '<hr>';
<?php
//數(shù)組元素回調(diào)處理(注意不能留空:就是不能有空格鍵,否則報(bào)錯(cuò))
$arr=[10,'id'=>20,false,null,(new class{}),0,'','0',true];
//array_filter — 用回調(diào)函數(shù)過(guò)濾數(shù)組中的單元
//表示:過(guò)濾掉空數(shù)組,留下有值的數(shù)組
//php自動(dòng)轉(zhuǎn)為false的值: null, false, 空數(shù)組, 空字符串, 0, '0'
//可以這樣寫(xiě):
//$res=array_filter($arr,function($item){
// return $item;
// });
//這樣簡(jiǎn)寫(xiě):
$res=array_filter($arr);
//echo $res;
$res1=print_r($res,true);
//如果需要返回標(biāo)量:
//is_scalar — 檢測(cè)變量是否是一個(gè)標(biāo)量
//標(biāo)量:?jiǎn)沃底兞?。?shù)組和對(duì)象都不是單值變量
$scalar=array_filter($arr,function($item){
return is_scalar($item);
});
$scalar1=print_r($scalar,true);
printf('<pre>%s<p>返回標(biāo)量</p>%s</pre>',$res1,$scalar1);
echo '<hr>';
$arr=['name',20,[1,2,3],(new class{public $Bname='小米';public $Price=3000;}),'purch'=>'立即購(gòu)買(mǎi)'];
////array_map — 將回調(diào)函數(shù)作用到給定數(shù)組的單元上
$res=array_map(function($item){
//拉平數(shù)組$item接受數(shù)據(jù)。gettype獲取變量類(lèi)型
switch(gettype($item)){
//get_object_vars — 返回由對(duì)象屬性組成的關(guān)聯(lián)數(shù)組
case 'object':
$item=get_object_vars($item);
//implode — 將一個(gè)一維數(shù)組的值轉(zhuǎn)化為字符串
case 'array':
$item=implode($item);
}
return $item;
},$arr);
printf('<pre>%s</pre>',print_r($res,true));
echo '<hr>';
//array_map()同時(shí)處理多個(gè)數(shù)組
$key=['host','root','password','db'];
$val=['localhost','root','1231456','baidu'];
//array_combine — 創(chuàng)建一個(gè)數(shù)組,用一個(gè)數(shù)組的值作為其鍵名,另一個(gè)數(shù)組的值作為其值
$res =array_combine($key,$val);
//echo $res;
//$res1=print_r($res,true);
printf('<pre>%s</pre>',print_r($res,true));
echo '<hr>';
$res=array_map(function($val1,$val2){
return [$val1=>$val2];
},$key,$val);
printf('<pre>%s</pre>',print_r($res,true));
echo $res[2]['password'];
echo '<hr>';
//array_reduce — 用回調(diào)函數(shù)迭代地將數(shù)組簡(jiǎn)化為單一的值
$res=array_reduce($res,function($prev,$current){
//獲取當(dāng)前元素“鍵”
$key=key($current);
//獲取“值”
$val=current($current);
//鍵和值拼裝
$prev[$key]=$val;
return $prev;
});
printf('<pre>%s</pre>',print_r($res,true));
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)