Maison développement back-end tutoriel php PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)_PHP教程

PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)_PHP教程

Jul 13, 2016 am 10:26 AM
php Pointeur du tableau Traversage du tableau

一、数组遍历的3个方法介绍

1. foreach()

foreach()是一个用来遍历数组中数据的最简单有效的方法。

#example1:

复制代码 代码如下:

$colors= array('red','blue','green','yellow');
foreach ($colorsas$color){
echo "Do you like $color?
";
}
?>

显示结果:

Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?

2. while()

while() 通常和 list(),each()配合使用。

#example2:

复制代码 代码如下:

$colors= array('red','blue','green','yellow');
while(list($key,$val)= each($colors)) {
echo "Other list of $val.
";
}
?>

显示结果:

Other list of red.
Other list of blue.
Other list of green.
Other list of yellow.

3. for()

#example3:

复制代码 代码如下:

$arr= array ("0"=> "zero","1"=> "one","2"=> "two");
for ($i= 0;$i $str= $arr[$i];
echo "the number is $str.
";
}
?>

显示结果:

the number is zero.
the number is one.
the number is two.

二、数组指针操作函数介绍

key()

mixed key(array input_array)

key()函数返回input_array中位于当前指针位置的键元素。

#example4

复制代码 代码如下:

$capitals= array("Ohio"=> "Columbus","Towa"=> "Des Moines","Arizona"=> "Phoenix");
echo "

Can you name the capitals of these states?

";
while($key= key($capitals)) {
echo $key."
";
next($capitals);
//每个key()调用不会推进指针。为此要使用next()函数
}
?>

显示结果:

Can you name the capitals of these states?
Ohio
Towa
Arizona

reset()

mixed reset(array input_array)

reset()函数用来将input_array的指针设置回数组的开始位置。如果需要在一个脚本中多次查看或处理同一个数组,就经常使用这个函数,另外这个函数还常用于排序结束时。

#example5 - 在#example1上追加代码

复制代码 代码如下:

$colors= array('red','blue','green','yellow');
foreach ($colorsas$color){
echo "Do you like $color?
";
}
reset($colors);
while(list($key,$val)= each($colors)) {
echo "$key=> $val
";
}
?>

显示结果:

Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?
0 => red
1 => blue
2 => green
3 => yellow

注意:将一个数组赋值给另一个数组时会重置原来的数组指针,因此在上例中如果我们在循环内部将 $colors 赋给了另一个变量的话将会导致无限循环。
例如将 $s1 = $colors; 添加到while循环内,再次执行代码,浏览器就会无休止地显示结果。

each()

array each(array input_array)

each()函数返回输入数组当前键/值对,并将指针推进一个位置。返回的数组包含四个键,键0和key包含键名,而键1和value包含相应的数据。如果执行each()前指针位于数组末尾,则返回FALSE。

#example6

复制代码 代码如下:

$capitals= array("Ohio"=> "Columbus","Towa"=> "Des Moines","Arizona"=> "Phoenix");
$s1= each($capitals);
print_r($s1);
?>

显示结果:

Array ( [1] => Columbus [value] => Columbus [0] => Ohio [key] => Ohio )


current(),next(),prev(),end()

mixed current(array target_array)

current()函数返回位于target_array数组当前指针位置的数组值。与next()、prev()、和end()函数不同,current()不移动指针。
next()函数返回紧接着放在当前数组指针的下一个位置的数组值。
prev()函数返回位于当前指针的前一个位置的数组值,如果指针本来就位于数组的第一个位置,则返回FALSE。
end()函数将指针移向target_array的最后一个位置,并返回最后一个元素。


#example7

复制代码 代码如下:

$fruits= array("apple","orange","banana");
$fruit= current($fruits); //return "apple"
echo $fruit."
";
$fruit= next($fruits); //return "orange"
echo $fruit."
";
$fruit= prev($fruits); //return "apple"
echo $fruit."
";
$fruit= end($fruits); //return "banana"
echo $fruit."
";
?>

显示结果:

apple
orange
apple
banana

三、测试三种遍历数组的速度

一般情况下,遍历一个数组有三种方法,for、while、foreach。其中最简单方便的是foreach。下面先让我们来测试一下共同遍历一个有50000个下标的一维数组所耗的时间。

测试环境:
Intel Core Due2 2GHz
2GB 1067MHz DDR3
Mac OS X 10.5.7
Apache 2.0.59
MySQL 5.0.41
PHP 5.2.6


#example8

复制代码 代码如下:

$arr= array();
for($i= 0; $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 $str= $arr[$i];
}
$time_end= GetRunTime();
$time_used= $time_end- $time_start;
echo 'Used time of for:'.round($time_used, 7).'(s)

';
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)

';
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)

';
?>

测试结果:

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还可以遍历类的属性。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/824613.htmlTechArticle一、数组遍历的3个方法介绍 1. foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法。 #example1: 复制代码 代码如下: php $colors= ar...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment obtenir le nom de classe d'un objet en PHP? Comment obtenir le nom de classe d'un objet en PHP? Sep 01, 2025 am 04:48 AM

Useget_class ($ objet) togetTheClassNameAtRuntime; 2.UsemycLass :: classforcompile-timeclassnameStringings, en particulier avec des espaces; 3.InsideAclassMethod, get_class ($ this) returnshecurrentObject'sclassName.

Quelle est la différence entre == et === dans PHP? Quelle est la différence entre == et === dans PHP? Sep 01, 2025 am 07:50 AM

=== Les valeurs et les types sont nécessaires pour être les mêmes, == SEUX SEMANTS SIMITE SI les valeurs sont égales. Par exemple, 5 == "5" est vrai, mais 5 === "5" est faux, selon le type. === Pas de conversion de type, plus sécurisée et stricte.

Comment crypter et déchiffrer les données en PHP? Comment crypter et déchiffrer les données en PHP? Sep 01, 2025 am 04:11 AM

UseOpenSSL_encrypt () andopenSSL_Decrypt () WithAes-256-CBCForsECurephPencryption.GeneratEarandomivperencryption, DeriveKeyViasha-256, andstoreivWithCipherTextUsingBase64Encoding.Afordecryption, extractiveRegereateKeyToreCoverPlaintex

Regardez The Anime Republic Online HD Site Web Regardez The Anime Republic Online gratuitement Regardez The Anime Republic Online HD Site Web Regardez The Anime Republic Online gratuitement Sep 02, 2025 pm 02:09 PM

Le site Web haute définition pour la visualisation en ligne de l'Anime Republic est https://www.dmgmhg.com/. La plate-forme possède des ressources riches et couvre les anime populaires au pays et à l'étranger. Il prend en charge la lecture à haute définition, le cache hors ligne et l'interaction des barrages. L'interface est simple et l'expérience de vision est fluide.

233 La version Web Paradise est disponible pour le plaisir sans téléchargement. 233 Adresse Web de paradis 233 La version Web Paradise est disponible pour le plaisir sans téléchargement. 233 Adresse Web de paradis Sep 02, 2025 pm 02:03 PM

L'entrée de la version Web 233 Paradise pour ouvrir et jouer est https://www.233leyuan.com. Cette plate-forme ne nécessite pas de téléchargement et prend en charge le jeu en ligne direct, offrant des types de jeux riches, une expérience de fonctionnement en douceur et des fonctions d'interaction communautaire complètes.

Quelle est la forme patrimoniale culturelle intangible de la chanson ancienne de Miao? Réponse de Ant New Village le 2 septembre Quelle est la forme patrimoniale culturelle intangible de la chanson ancienne de Miao? Réponse de Ant New Village le 2 septembre Sep 02, 2025 pm 02:21 PM

Je crois que certains amis ne savent pas quel genre de forme patrimoniale culturelle intangible des chansons anciennes Miao. La réponse de Ant New Village le 2 septembre est la dernière. L'éditeur de PHP vous apportera des réponses à cet égard. Venez jeter un œil. Entrez immédiatement "une variété de recommandations de sites Web utiles☜☜☜☜☜☜☜☜click pour entrer";

NEKOANIME ANIME SITE WEB GRATUITE NEKOANIME ANIME SITE WEB GRATUITE Sep 02, 2025 pm 04:00 PM

L'URL de visualisation gratuite de Nekoanime est https://nekoanime.org/. La plate-forme fournit des ressources d'animation nouvelles et anciennes couvrant une variété de types et de régions. Il prend en charge les sous-titres multi-langues, a une interface claire, une recherche rapide, est adaptée aux terminaux mobiles, à la lecture en douceur et prend en charge la commutation multi-définition.

Comment utiliser FILE_GET_CONTENTS avec des données post-PHP? Comment utiliser FILE_GET_CONTENTS avec des données post-PHP? Sep 02, 2025 am 07:48 AM

Utilisez File_get_Contents pour envoyer des données post-post, vous devez définir la méthode HTTP, l'en-tête et la demande de corps via Stream_Context_Create. 1. Configurez le tableau d'options, spécifiez que la méthode est publiée, l'en-tête contient les données après le type de contenu et le contenu est http_build_query ou json_encode. 2. Créez un contexte et appelez File_get_Contents. 3. Pour gérer les résultats et les erreurs de retour, vous pouvez utiliser $ http_response_header pour obtenir l'en-tête de réponse. Cette méthode ne nécessite pas de boucle et est légère et efficace.

See all articles