❶ php中這樣的數組怎麼遍歷
這三種方法中效率最高的是使用foreach語句遍歷數組。從PHP4開始就引入了foreach結構,是PHP中專門為遍歷數組而設計的語句,推薦大家使用。先分別介紹這幾種方法PHP中遍歷數組有三種常用的方法:
一、使用for語句循環遍歷數組;
二、使用foreach語句遍歷數組;
三、聯合使用list()、each()和while循環遍歷數組。
這三種方法中效率最高的是使用foreach語句遍歷數組。從PHP4開始就引入了foreach結構,是PHP中專門為遍歷數組而設計的語句,推薦大家使用。先分別介紹這幾種方法。
一、使用for語句循環遍歷數組
值得大家注意的是使用for語句循環遍歷數組要求遍歷的數組必須是索引數組。PHP中不僅有關聯數組而且還有索引數組,所以PHP中很少用for語句循環遍歷數組。
實例代碼如下:
代碼如下:
<?php
$arr =
array('http://www.jb51.net','腳本之家','PHP教程');
$num = count($arr);
for($i=0;$i<$num;++$i){
echo $arr[$i].'<br />';
}
?>
注釋:上例代碼中我們先計算出數組$arr中元素的個數,然後才使用在for語句,這樣做很高效的。因為如果是for($i=0;$i<
count($arr);++$i)的話,每次循環都會計算數組$arr中元素的個數,而使用上面的方式可以減去這種開銷。使用++$i也是為了提高效率,前面有文章我們提到過,建議大家再看看。
上面代碼的輸出結果為:
http://www.jb51.net
腳本之家
PHP教程
二、使用foreach語句遍歷數組
使用foreach語句循環遍歷數組有二種方式,我們使用的最多的還是第一種方式。介紹如下:
第一種方式:
foreach(array_expression as $value){
//循環體
}
實例代碼:
代碼如下:
<?php
$arr =
array('http://www.jb51.net','腳本之家','PHP教程');
foreach($arr as $value){
echo $value.'<br />';
}
?>
每次循環中,當前元素的值被賦給變數$value,並且把數組內部的指針向後移動一步。所以下一次循環中會得到數組的下一個元素,直到數組的結尾才停止循環,結束數組的遍歷。
第二種方式:
foreach(array_expression as
$key=>$value){
//循環體
}
實例代碼:
代碼如下:
<?php
//定義數組
$arr =
array('http://www.jb51.net','腳本之家','PHP教程');
foreach($arr as $k=>$v){
echo $k."=>".$v."<br />";
}
?>
三、聯合使用list()、each()和while循環遍歷數組
each()函數需要傳遞一個數組作為一個參數,返回數組中當前元素的鍵/值對,並向後移動數組指針到下一個元素的位置。
list()函數,這不是一個真正的函數,是PHP的一個語言結構。list()用一步操作給一組變數進行賦值。
實例代碼:
代碼如下:
<?php
//定義循環的數組
$arr =
array('website'=>'http://www.jb51.net','webname'=>'腳本之家')
while(list($k,$v) = each($arr)){
echo $k.'=>'.$v.'<br />';
}
?> jb51.net
❷ PHP遍歷鍵值對數組
按你這個不需要遍歷呀。
/*
你這個結構應該是下面這樣
$arr=array('cont'=>'{"username":"3123213".....}');
$arr['cont'];//這個返回的是個字元串,json格式的需要處理下
$arr['cont']=json_decode($arr['cont']);
echo$arr['cont']['username'];//這個就能輸出3123213了
*/
❸ php數組遍歷追加數組鍵值的問題
可以遍歷兩次$a,第一次取出所有的父級欄目,放入$newarr中,第二次將子欄目放入對應
的父級欄目數組中,最後使用$newarr就行
不過這是建立在只有二級欄目的基礎上,如果有三級欄目的話就還要麻煩些了
$newarr=array();
foreach($aas$key=>$value)
{
if($value['fID']==0)
{
$cid=$value['cID'];
$newarr[$cid]=$value;
unset($a[$key]);
}
}
foreach($aas$key=>$value)
{
if($value['fID']!=0)
{
$fid=$value['fID'];
$newarr[$fid]['zilanmu'][]=$value;
}
}
❹ PHP 數組遍歷方法大全(foreach,list,each)
在PHP中數組分為兩類:
數字索引數組和關聯數組。
其中數字索引數組和C語言中的數組一樣,下標是為0,1,2…
而關聯數組下標可能是任意類型,與其它語言中的hash,map等結構相似。
下面介紹PHP中遍歷關聯數組的三種方法:
方法1:foreach
復制代碼
代碼如下:
<?php
$sports
=
array(
'football'
=>
'good',
'swimming'
=>
'very
well',
'running'
=>
'not
good');
foreach
($sports
as
$key
=>
$value)
{
echo
$key.":
".$value."<br
/>";
?>
輸出結果:
football:
good
swimming:
very
well
running:
not
good
方法2:each
復制代碼
代碼如下:
<?php
$sports
=
array(
'football'
=>
'good',
'swimming'
=>
'very
well',
'running'
=>
'not
good');
while
($elem
=
each($sports))
{
echo
$elem['key'].":
".$elem['value']."<br
/>";
?>
方法3:list
&
each
復制代碼
代碼如下:
<?php
$sports
=
array(
'football'
=>
'good',
'swimming'
=>
'very
well',
'running'
=>
'not
good');
while
(list($key,
$value)
=
each($sports))
{
echo
$key.":
".$value."<br
/>";
?>
❺ 請問這是幾維數組php多維數組遍歷求幫助
這是由多個鍵值對數組構成的二維數組,因為內層是鍵值對,外層是普通數組,
又因為內層是鍵值對,所以我們只需要遍歷外層的數組,然後依據鍵來訪問值,進行if判斷即可.
具體的php程序如下(注意去掉了user值的雙引號)
❻ 使用php Memcache模塊如何正確遍歷所有KEY以及VALUE
在php提供的用於與memcached交互的擴展模塊中有memcached與memcache,前者提供方法getAllKeys用於遍歷所有Memcached伺服器上的key,但是並不保證原子操作,而後者卻沒有提供任何方法,雖然在PHP官方
文檔中有人給出使用方法getExtendedStats來間接獲取Memcached伺服器上的所有key,但是給出的代碼是有不少坑的,如果拿來就用,對於cluster的memcached伺服器而言,有些問題就需要指出來。
下面將給出官方文檔中的代碼,並指出可能面臨的問題,代碼如下:
<?php
/**
*Functiontogetallmemcachekeys
*@authorManishPatel
*@Created:28-May-2010
*/
functiongetMemcacheKeys(){
$memcache=newMemcache;
$memcache->connect('127.0.0.1',11211)ordie("");
$list=array();
$allSlabs=$memcache->getExtendedStats('slabs');
$items=$memcache->getExtendedStats('items');
foreach($allSlabsas$server=>$slabs){
foreach($slabsAS$slabId=>$slabMeta){
$cmp=$memcache->getExtendedStats('cachemp',(int)$slabId);
foreach($cmpAS$keys=>$arrVal){
foreach($arrValAS$k=>$v){
echo$k."<br>";
}
}
}
}//EOgetMemcacheKeys()?>
在上述代碼中,如果用於獲取單個memcached伺服器上的key,是不存在任何問題,但是獲取連接池中的多個memcached所有key就存在問題,會發現列印出重復的key,問題就在於當使用getExtendedStats用去特定$slabID
上的信息時,返回的是連接池中所有的伺服器上的特定$slabId的存儲的keys信息。當$server為"127.0.0.1:11214"且$slabId為0將變數$cmp的信息列印出如下所示:
array(2){
["127.0.0.1:11214"]=>
array(1){
["course_schools__??¨é?¨"]=>
array(2){
[0]=>
string(1)"0"[1]=>
string(10)"12"}
}
["127.0.0.1:11216"]=>
array(1){
["monitorMemcache"]=>
array(2){
[0]=>
string(2)"10"[1]=>
string(10)"12"}
}
}
當$server為"127.0.0.1:11216"且$slabId為0將變數$cmp的信息列印出如下所示:
array(2){
["127.0.0.1:11214"]=>
array(1){
["course_schools__??¨é?¨"]=>
array(2){
[0]=>
string(1)"0"[1]=>
string(10)"12"}
}
["127.0.0.1:11216"]=>
array(1){
["monitorMemcache"]=>
array(2){
[0]=>
string(2)"10"[1]=>
string(10)"12"}
}
}
❼ PHP 怎麼樣遍歷
第一、foreach()
foreach()是一個用來遍歷數組中數據的最簡單有效的方法。
<?php
$urls= array('aaa','bbb','ccc','ddd');
foreach ($urls as $url){
echo "This Site url is $url! <br />";
}
?>
顯示結果:
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 />";
}
?>
顯示結果:
?
This Site url is aaa
This Site url is bbb
This Site url is ccc
This Site url is ddd
第三、for()運用for遍歷數組
<?php
$urls= array('aaa','bbb','ccc','ddd');
for ($i= 0;$i< count($urls); $i++){
$str= $urls[$i];
echo "This Site url is $str.<br />";
}
?>
顯示結果:
This Site url is aaa
This Site url is bbb
This Site url is ccc
This Site url is ddd
這幾種遍歷數組的方法哪個更快捷些呢,下面做個簡單的測試就明白了
=========== 下面來測試三種遍歷數組的速度 ===========
一般情況下,遍歷一個數組有三種方法,for、while、foreach。其中最簡單方便的是foreach。下面先讓我們來測試一下共同遍歷一個有50000個下標的一維數組所耗的時間。
<?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 />';
?>
測試結果:
Used time of for:0.0228429(s)
Used time of while:0.0544658(s)
Used time of foreach:0.0085628(s)
結果表明,對於遍歷同樣一個數組,foreach速度最快,最慢的則是while。從原理上來看,foreach是對數組副本進行操作(通過拷貝數組),而while則通過移動數組內部指標進行操作,一般邏輯下認為,while應該比foreach快(因為foreach在開始執行的時候首先把數組復制進去,而while直接移動內部指標。),但結果剛剛相反。原因應該是,foreach是PHP內部實現,而while是通用的循環結構。所以,在通常應用中foreach簡單,而且效率高。在PHP5下,foreach還可以遍歷類的屬性。
希望能夠喜歡。
❽ php 數組的處理 鍵值對處理
一個嵌套循環,加一條語句,算不上復雜吧。
<?php
$arr1=array(
array('asd'=>1,'sdf'=>1),
array('qew'=>1,'sdf'=>1),
array('zxc'=>1,'sdf'=>1),
);
$arr2=array('asd'=>'1','zxc'=>1);
foreach($arr1as$arr){
foreach($arras$key=>$val){
$arr2[$key]=isset($arr2[$key])?($arr2[$key]+$val):$val;
}
}
print_r($arr2);
exit;
❾ PHP中如何使用foreach結構遍歷數組
註:foreach只能用於數組
第一種格式遍歷給定數組$array,每次循環,當前單元的值被賦給 $value 並且數組內部的指針向前移一步(下一次循環中將會得到下一個單元)。
第二種格式也是遍歷給定的數組$array,不同的是鍵名也參與了。在每次循環中將鍵值賦給$value,將鍵名賦給變數 $key
<?
//第一種
$array=array(1,2,3,4);
foreach($array as $value){
echo $value." ";
}//輸出結果為:1 2 3 4
//第二種
foreach($array as $key=>$value){
echo $key."=>".$value." ";
}//輸出結果為:0=>1 1=>2 2=>3 3=>4
?>