Une brève introduction et utilisation de base
Utilisations des fonctions de bibliothèque standard courantes pour les tableaux PHP
Le tableau PHP simule les structures de données courantes
Instructions et points d'attention pour l'utilisation du tableau php
FAQ
Le tableau en PHP est en fait une carte ordonnée. Une carte est un type qui associe des valeurs à des clés.
Utilisez <?php $arr = array(1, 2, 3, 4);
pour définir un tableau normal
On peut également définir un tableau associatif
<?php $arr = array('a' => 1, 'z' => 100); >1
Si la version php >= 5.4, on peut définir le tableau de manière plus concise
<?php $arr = [1, 2, 3, 4]; $arr = ['a' => 1, 'z' => 100]; 123
Les tableaux PHP sont très puissants. Vous pouvez définir des tableaux de type mixte
<?php $arr = [1, 'hello' => '11', 'arr' => [1, 'a'=>'b']];12
Concernant l'opération d'accès au tableau, vous pouvez y accéder via [index]
:
<?php $arr = [1, 'hello' => '11', 'arr' => [1, 'a'=>'b']]; var_dump($arr[0]); // 1var_dump($arr['arr']); // [1, 'a' => 'b']1234
Vous pouvez également modifier la valeur de l'élément du tableau via []
<?php $arr = [1, 'hello' => '11', 'arr' => [1, 'a'=>'b']];$arr[0] = 'test'; var_dump($arr); 1234
Vous pouvez également continuer à ajouter des éléments de tableau dans le tableau initialisé
<?php$arr = [1, 2, 3, 4]; //追加元素$arr[] = 'a';// 添加 key, value$arr['test'] = 'b';123456
Bien sûr, l'opération de suppression d'éléments de tableau doit prendre en charge
<?php$arr = [1, 'hello' => '11', 'arr' => [1, 'a'=>'b']];unset($arr['hello']); var_dump($arr['hello']); // null1234
En développement, vous devez souvent parcourir des tableaux. Vous pouvez utiliser foreach :
<?php $arr = [1, 'hello' => '11', 'arr' => [1, 'a'=>'b']];foreach($arr as $key => $value) { var_dump($key . ' => ' . $value); }12345
Pour. pour plus de méthodes de traversée de tableaux, veuillez vous référer à php-array traversal
- Pour comparer les tableaux, les tableaux ne peuvent pas comparer les tailles, mais ils peuvent être jugés s'ils sont égaux selon certaines conditions
<?php // $a == $b 相等 如果 $a 和 $b 具有相同的键/值对则为 TRUE。 // $a === $b 全等 如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE。$a = [1, 2];$b = ['1' => 2, 0 => 1]; var_dump($a == $b); // truevar_dump($a === $b); // false123456789
Maîtriser les opérations de base des tableaux (Définition et utilisation, ajouter, supprimer, modifier, vérifier, parcourir) Après cela, vous pouvez utiliser le tableau en développement, mais ces opérations seules sont loin d'être suffisant. Afin de répondre aux besoins de scénarios de développement complexes et changeants pour les opérations sur les tableaux, PHP fournit des fonctions puissantes Un ensemble de fonctions d'opération sur les tableaux
- Obtenir la longueur du tableau
<?php $arr = [1, 2, 3]; var_dump(count($arr)); // 3123
Si vous souhaitez déterminer si une variable est un tableau, vous pouvez utiliser is_array() :
<?php $arr = [1, 2, 3];$notArr = '111'; var_dump(is_array($arr)); // truevar_dump(is_array($notArr)); // false12345
a plus de clé ou de valeur, pour déterminer si l'élément est dans le tableau
// 判断key 是否在数组中$arr = ['a' => 2, 4]; var_dump(isset($arr['a'])); // true var_dump(array_key_exists('a', $arr)); // true// 判断 value 是否在数组中in_array(5, $arr); // false1234567
Obtenir tous les éléments du tableau Clés
<?php $arr = ['a' => 2, 4];$keys = array_keys($arr); // ['a', 1]123
Obtenir toutes les valeurs du tableau (valeurs)
<?php $arr = ['a' => 2, 4];$values = array_values($arr); // [2, 4]123
Pour compter le nombre de fois où chaque valeur d'élément de un tableau apparaît, vous pouvez utiliser array_count_values :
<?php$arr = [1, 3, 2, 'a' => 1, 'b' => 2]; var_dump(array_count_values($arr));/* array(3) { [1]=> int(2) [3]=> int(1) [2]=> int(2) } */1234567891011121314
Opérations entre tableaux : Un tableau peut être considéré comme un ensemble, et les opérations entre ensembles (Intersection, différence, union, complément, comparaison, etc.) PHP fournit également des méthodes correspondantes pour implémenter la
fusion de tableaux
<?php$arr1 = ['a' => 1, 2, 'b' => 3];$arr2 = ['b' => 5, 2]; var_dump( array_merge($arr1, $arr2) ); /* array(4) { ["a"]=> int(1) [0]=> int(2) ["b"]=> int(5) [1]=> int(2) } // 你也可以使用 + 操作符, 请注意两种方法结果的差别 var_dump($arr1 + $arr2); */12345678910111213141516171819
Si vous devez calculer l'intersection de deux valeurs de tableau ou plus, vous pouvez utiliser l'ensemble de différences de tableau array_intersect
<?php$arr1 = [1, 2, 3];$arr2 = [5, 2]; var_dump( array_intersect($arr1, $arr2) ); // [2]1234
(par valeur et par clé)
<?php$a = [1, 2];$b = ['1' => 2, 0 => 1, 4];//array_diff 按照索引 和 值 比较差异var_dump(array_diff($a, $b));// array_diff_key() 函数用于比较两个(或更多个)数组的键名 ,并返回差集 var_dump(array_diff_key($a, $b)); 123456789
Si vous avez besoin d'obtenir un sous-tableau, vous pouvez utiliser array_slice pour produire un effet similaire au découpage python
<?php$arr = [1, 2, 3, 4, 5, 6, 7, 8];// 从第3个元素开始, 直到结束var_dump(array_slice($arr, 2));// 从第3个元素开始, 长度为4var_dump(array_slice($arr, 2, 4));// 从第3个元素开始,到倒数第3个元素var_dump(array_slice($arr, 2, -2));// 注意 索引的差别var_dump(array_slice($arr, 2, -2, true));12345678910111213
Concernant l'opération de tri des tableaux, c'est aussi une exigence de développement relativement courante. Il est à noter que : les fonctions de tri php agissent toutes directement sur le tableau lui-même, et le font. ne renvoie pas un nouveau tableau trié. , le code suivant fournit plusieurs scénarios courants. Pour plus d'informations, veuillez vous référer à PHP pour trier les tableaux :
<?php// 按照值(value)升序排序, 索引更新$arr = [6,'a'=>2, 3, 4, 6, -1, 7, 8]; sort($arr); var_dump($arr);// 按照值(value)升序排序, 索引保持$arr = [6,'a'=>2, 3, 4, 6, -1, 7, 8]; asort($arr); var_dump($arr);// 按照值(value)降序排序, 索引保持$arr = [6,'a'=>2, 3, 4, 6, -1, 7, 8]; arsort($arr); var_dump($arr);// 按照 键(key)进行升序排序 , 索引保持$arr = ['a' => 10, 'c' => 1, 'b' => 12]; ksort($arr); var_dump($arr);// 按照 键(key)进行降序排序 , 索引保持$arr = ['a' => 10, 'c' => 1, 'b' => 12]; krsort($arr); var_dump($arr);// 用户自定义排序, 根据值(value) , 索引更新// 请注意:对于自定义的比较函数,// 在第一个参数小于,等于或大于第二个参数时,// 该比较函数必须相应地返回一个小于,等于或大于 0 的整数。function cmp($val1, $val2){ if($val1 > $val2) { return 1; } elseif ($val1 == $val2) { return 0; } else { return -1; } }$arr = [ 'a' => 1, 'A' => 3, 'B' => 2, ]; usort($arr, cmp); var_dump($arr);// 根据key 自定义排序规则,请使用 uksort(), 用法同usort()123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
À propos des tableaux et des chaînes. les opérations incluent généralement la coupe de chaînes et la fusion d'éléments de tableau en chaînes. Cela peut être réalisé à l'aide d'exploser et d'imploser
<?phpvar_dump(explode(',', "a,a,a,a,a,a")); // 以,为分割符将字符串"a,a,a,a,a,a" 切割成数组var_dump(implode('-', [1, 2, 3, 4, 5])); //以 - 为 拼接符 将 数组[1, 2, 3, 4, 5] 拼接成字符串1234
À propos de php Plus de fonctions liées au tableau, vous pouvez. reportez-vous au document officiel Liste des fonctions des tableaux PHP
Les tableaux PHP peuvent simuler des structures de données communes, la plus évidente est les tables de mappage et dictionnaires, voici une brève introduction à la simulation de piles et de files d'attente par des tableaux PHP.
Pile de simulation (FILO)
<?php$stack = [1, 2, 3, 4];//入栈array_push($stack, -1); var_dump($stack); // [1, 2, 3, 4, -1]//出栈$e = array_pop($stack); var_dump($e); // -1var_dump($stack); // [1, 2, 3, 4]1234567891011
File d'attente de simulation (FIFO)
<?php$queue = [];//入队列array_unshift($queue, 1); array_unshift($queue, 2); array_unshift($queue, 3); array_unshift($queue, 4);//出队列$e = array_pop($queue); var_dump($e); // 1$e = array_pop($queue); var_dump($e); // 2$e = array_pop($queue); var_dump($e); // 3$e = array_pop($queue); var_dump($e); // 4123456789101112131415161718
les valeurs des clés du tableau php auront les conversions forcées suivantes
Les chaînes contenant des valeurs entières légales seront converties en entiers. Par exemple, le nom de clé « 8 » sera en réalité stocké sous la forme 8. Mais "08" ne sera pas converti car il ne s'agit pas d'une valeur décimale légale.
Les nombres à virgule flottante seront également convertis en nombres entiers, ce qui signifie que leurs parties décimales seront arrondies. Par exemple, le nom de clé 8.7 sera en réalité stocké sous la forme 8.
Les valeurs booléennes seront également converties en entiers. Autrement dit, le nom de clé true sera en fait stocké sous la valeur 1 et le nom de clé false sera stocké sous la valeur 0.
Null 会被转换为空字符串,即键名 null 实际会被储存为 “”。
数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
因此以下代码可能导致意外的结果,请注意以下代码的输出:
<?php$arr = [1, 2, '8' => 3];$arr[false] = -20; var_dump($arr); // [-20, 2, '8' => 3]$arr[8] = 20; var_dump($arr); // [-20, 2, 8 => 20]$arr[8.7] = 15; var_dump($arr); // [-20, 2, 8 => 15]$arr["8.7"] = 10; var_dump($arr); // [-20, 2, 8 => 10]$arr[$val] = 5; // 注意$val之前为声明,因此默认值为null, 数组key为null时会被转为""空串 var_dump($arr); // [-20, 2, 8 => 10, "" => 5]$arr[bar] = 6; // 标识符被转化为 'bar'var_dump($arr); // [-20, 2, 8 => 10, "" => 5, 'bar' => 6]12345678910111213141516171819202122
关于php数组的类型转换
php数组可以将其他一切类型转为数组,转化的效果请参考一下代码,重点观察对 null 和 object对象的转化:
<?php$var = true; var_dump((array)$var);/* array(1) { [0]=> bool(true) }*/$var = 1; var_dump((array)$var);/* array(1) { [0]=> int(1) }*/$var = 1.1; var_dump((array)$var);/* array(1) { [0]=> float(1.1) }*/$var = "111"; var_dump((array)$var);/* array(1) { [0]=> string(3) "111" }*/$var = null; var_dump((array)$var); // 返回空数组/* array(0) { } */class Cls { public $a = 1; protected $b = 2; private $c = 3; } var_dump((array)(new Cls)); // 可见性不同 key值格式有所不同/* array(3) { ["a"]=> int(1) ["*b"]=> int(2) ["Clsc"]=> int(3) } */123456789101112131415161718192021222324252627282930313233343536373839404142434445
关于PHP类型转换的了解,请参考PHP-类型转换的判别
如何添加数组元素更为高效? array_push($arr, key, value)
or $arr[key] = value
? 答: 后者更为高效, 更多细节请参考官方资料
isset or array_key_exists() ? 答:
对于存在key的数组,如果 对应的value = null , isset($arr[key])
会返回 false;而对于array_key_exists
只要对应key存在就会返回true;
然而在效率方面,isset
效率 高于array_key_eixsts
在判断数组元素是否存在的最佳实践如下:
<?php if (isset($arr[$key]) or array_key_exists($key, $arr)) { ...}1234
数组合并 +
和 array_merge
的区别? 答:可以参考该资料
array_diff
与 ==
的异同? 答:语义有所差别, 数组的相等比较 推荐只使用==
遍历方式那种更高效? 答:foreach 方式 遍历 最为高效
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!