在PHP中數(shù)組分為兩類:
成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、賀蘭網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為賀蘭等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
數(shù)字索引數(shù)組和關(guān)聯(lián)數(shù)組。
其中數(shù)字索引數(shù)組和C語言中的數(shù)組一樣,下標(biāo)是為0,1,2…
而關(guān)聯(lián)數(shù)組下標(biāo)可能是任意類型,與其它語言中的hash,map等結(jié)構(gòu)相似。
下面介紹PHP中遍歷關(guān)聯(lián)數(shù)組的三種方法:
方法1:foreach
復(fù)制代碼
代碼如下:
?php
$sports
=
array(
'football'
=
'good',
'swimming'
=
'very
well',
'running'
=
'not
good');
foreach
($sports
as
$key
=
$value)
{
echo
$key.":
".$value."br
/";
?
輸出結(jié)果:
football:
good
swimming:
very
well
running:
not
good
方法2:each
復(fù)制代碼
代碼如下:
?php
$sports
=
array(
'football'
=
'good',
'swimming'
=
'very
well',
'running'
=
'not
good');
while
($elem
=
each($sports))
{
echo
$elem['key'].":
".$elem['value']."br
/";
?
方法3:list
each
復(fù)制代碼
代碼如下:
?php
$sports
=
array(
'football'
=
'good',
'swimming'
=
'very
well',
'running'
=
'not
good');
while
(list($key,
$value)
=
each($sports))
{
echo
$key.":
".$value."br
/";
?
你的意思是用戶輸入nickname?比如輸'user2'?然后你這邊取user2對應(yīng)的password嗎?
$data?=?[
'user'=[
"0a8a5986a6c18920fd456fdfbb048913"=[
"nickname"="user1",
"userName"="username",
"passWord"="password",
"status"=1,
],
"0ffb201c2335a784abd19c2985797711"=[
"nickname"="user2",
"userName"="username",
"passWord"="password",
"status"=1,
],
]
];
//第一種情況是user數(shù)組里有多個叫user2的nickname,這樣查出的password也會有多個,所以就需要循環(huán)來處理了
$nickname='user2';//這里是用戶輸入的值
$password=[];
foreach?($data['user']?as?$val){
if($val['nickname']==$nickname){
$password[]=$val['passWord'];
}
}
print_r($password);
//第二情況就是user數(shù)組里只會有一個叫user2的nickname,這樣只會查出一個password
$nickname='user2';//這里是用戶輸入的值
$user=array_column($data['user'],null,'nickname');
$password=$user[$nickname]['passWord'];
echo?$password;
第一、foreach()
foreach()是一個用來遍歷數(shù)組中數(shù)據(jù)的最簡單有效的方法。
?php
$urls= array('aaa','bbb','ccc','ddd');
foreach ($urls as $url){
echo "This Site url is $url! br /";
}
?
顯示結(jié)果:
This Site url is aaa
This Site url is bbb
This Site url is ccc
This Site url is ddd
第二、while() 和 list(),each()配合使用。
?php
$urls= array('aaa','bbb','ccc','ddd');
while(list($key,$val)= each($urls)) {
echo "This Site url is $val.br /";
}
?
顯示結(jié)果:
?
This Site url is aaa
This Site url is bbb
This Site url is ccc
This Site url is ddd
第三、for()運用for遍歷數(shù)組
?php
$urls= array('aaa','bbb','ccc','ddd');
for ($i= 0;$i count($urls); $i++){
$str= $urls[$i];
echo "This Site url is $str.br /";
}
?
顯示結(jié)果:
This Site url is aaa
This Site url is bbb
This Site url is ccc
This Site url is ddd
這幾種遍歷數(shù)組的方法哪個更快捷些呢,下面做個簡單的測試就明白了
=========== 下面來測試三種遍歷數(shù)組的速度 ===========
一般情況下,遍歷一個數(shù)組有三種方法,for、while、foreach。其中最簡單方便的是foreach。下面先讓我們來測試一下共同遍歷一個有50000個下標(biāo)的一維數(shù)組所耗的時間。
?php
$arr= array();
for($i= 0; $i 50000; $i++){
$arr[]= $i*rand(1000,9999);
}
function GetRunTime()
{
list($usec,$sec)=explode(" ",microtime());
return ((float)$usec+(float)$sec);
}
######################################
$time_start= GetRunTime();
for($i= 0; $i count($arr); $i++){
$str= $arr[$i];
}
$time_end= GetRunTime();
$time_used= $time_end- $time_start;
echo 'Used time of for:'.round($time_used, 7).'(s)br /br /';
unset($str, $time_start, $time_end, $time_used);
######################################
$time_start= GetRunTime();
while(list($key, $val)= each($arr)){
$str= $val;
}
$time_end= GetRunTime();
$time_used= $time_end- $time_start;
echo 'Used time of while:'.round($time_used, 7).'(s)br /br /';
unset($str, $key, $val, $time_start, $time_end, $time_used);
######################################
$time_start= GetRunTime();
foreach($arr as$key= $val){
$str= $val;
}
$time_end= GetRunTime();
$time_used= $time_end- $time_start;
echo 'Used time of foreach:'.round($time_used, 7).'(s)br /br /';
?
測試結(jié)果:
Used time of for:0.0228429(s)
Used time of while:0.0544658(s)
Used time of foreach:0.0085628(s)
結(jié)果表明,對于遍歷同樣一個數(shù)組,foreach速度最快,最慢的則是while。從原理上來看,foreach是對數(shù)組副本進行操作(通過拷貝數(shù)組),而while則通過移動數(shù)組內(nèi)部指標(biāo)進行操作,一般邏輯下認為,while應(yīng)該比foreach快(因為foreach在開始執(zhí)行的時候首先把數(shù)組復(fù)制進去,而while直接移動內(nèi)部指標(biāo)。),但結(jié)果剛剛相反。原因應(yīng)該是,foreach是PHP內(nèi)部實現(xiàn),而while是通用的循環(huán)結(jié)構(gòu)。所以,在通常應(yīng)用中foreach簡單,而且效率高。在PHP5下,foreach還可以遍歷類的屬性。
希望能夠喜歡。