导航:首页 > 编程语言 > php遍历键值对

php遍历键值对

发布时间:2022-07-16 20:31:16

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

?>

阅读全文

与php遍历键值对相关的资料

热点内容
寿司解压系列全集视频 浏览:911
物体三维重建算法 浏览:982
fuli直播app哪个好 浏览:918
租办公室用什么app 浏览:104
医师定期考核刷题app哪个好 浏览:336
导出dmp文件命令 浏览:286
手机百度网盘怎么解压密码文件 浏览:583
索引重新编译 浏览:604
命令与征服4免cd补丁完美版 浏览:426
kotlin编译为native 浏览:140
家用编译机 浏览:549
电子加密货币最新政策 浏览:380
androidcanvas撤销 浏览:269
安卓手机怎么把图标全部下移 浏览:185
饥荒被服务器踢出怎么进 浏览:171
c编译器哪款好 浏览:732
快手宝哥发明什么app 浏览:822
张艳玲编译 浏览:67
android展开收起动画 浏览:237
linuxxz文件 浏览:160