Maison  >  Article  >  développement back-end  >  Une brève introduction aux tableaux dans le didacticiel PHP

Une brève introduction aux tableaux dans le didacticiel PHP

巴扎黑
巴扎黑original
2017-08-09 14:41:221182parcourir

1. Présentation

  • 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


2. Brève introduction et utilisation de base

  • 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(&#39;a&#39; => 1, &#39;z&#39; => 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 = [&#39;a&#39; => 1, &#39;z&#39; => 100]; 123
  • Les tableaux PHP sont très puissants. Vous pouvez définir des tableaux de type mixte

<?php $arr = [1, &#39;hello&#39; => &#39;11&#39;, &#39;arr&#39; => [1, &#39;a&#39;=>&#39;b&#39;]];12
  • Concernant l'opération d'accès au tableau, vous pouvez y accéder via [index] :

<?php $arr = [1, &#39;hello&#39; => &#39;11&#39;, &#39;arr&#39; => [1, &#39;a&#39;=>&#39;b&#39;]];
var_dump($arr[0]); // 1var_dump($arr[&#39;arr&#39;]); // [1, &#39;a&#39; => &#39;b&#39;]1234
  • Vous pouvez également modifier la valeur de l'élément du tableau via []

<?php $arr = [1, &#39;hello&#39; => &#39;11&#39;, &#39;arr&#39; => [1, &#39;a&#39;=>&#39;b&#39;]];$arr[0] = &#39;test&#39;;
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[] = &#39;a&#39;;// 添加 key, value$arr[&#39;test&#39;] = &#39;b&#39;;123456
  • Bien sûr, l'opération de suppression d'éléments de tableau doit prendre en charge

<?php$arr = [1, &#39;hello&#39; => &#39;11&#39;, &#39;arr&#39; => [1, &#39;a&#39;=>&#39;b&#39;]];unset($arr[&#39;hello&#39;]);
var_dump($arr[&#39;hello&#39;]);  // null1234
  • En développement, vous devez souvent parcourir des tableaux. Vous pouvez utiliser foreach :

<?php $arr = [1, &#39;hello&#39; => &#39;11&#39;, &#39;arr&#39; => [1, &#39;a&#39;=>&#39;b&#39;]];foreach($arr as $key => $value) {
    var_dump($key . &#39; => &#39; . $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 = [&#39;1&#39; => 2, 0 => 1];

var_dump($a == $b); // truevar_dump($a === $b); // false123456789

3. Fonctions pratiques de l'outil tableau

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 = &#39;111&#39;;
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 = [&#39;a&#39; => 2, 4];
var_dump(isset($arr[&#39;a&#39;])); // true  var_dump(array_key_exists(&#39;a&#39;, $arr)); // true// 判断 value 是否在数组中in_array(5, $arr);  // false1234567
  • Obtenir tous les éléments du tableau Clés

<?php $arr = [&#39;a&#39; => 2, 4];$keys = array_keys($arr); // [&#39;a&#39;, 1]123
  • Obtenir toutes les valeurs du tableau (valeurs)

<?php $arr = [&#39;a&#39; => 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, &#39;a&#39; => 1, &#39;b&#39; => 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 = [&#39;a&#39; => 1, 2, &#39;b&#39; => 3];$arr2 = [&#39;b&#39; => 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 = [&#39;1&#39; => 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,&#39;a&#39;=>2, 3, 4, 6, -1, 7, 8];
sort($arr);
var_dump($arr);// 按照值(value)升序排序, 索引保持$arr = [6,&#39;a&#39;=>2, 3, 4, 6, -1, 7, 8];
asort($arr);
var_dump($arr);// 按照值(value)降序排序, 索引保持$arr = [6,&#39;a&#39;=>2, 3, 4, 6, -1, 7, 8];
arsort($arr);
var_dump($arr);// 按照 键(key)进行升序排序 , 索引保持$arr = [&#39;a&#39; => 10, &#39;c&#39; => 1, &#39;b&#39; => 12];
ksort($arr);
var_dump($arr);// 按照 键(key)进行降序排序 , 索引保持$arr = [&#39;a&#39; => 10, &#39;c&#39; => 1, &#39;b&#39; => 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 = [    &#39;a&#39; => 1,    &#39;A&#39; => 3,    &#39;B&#39; => 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(&#39;,&#39;, "a,a,a,a,a,a")); // 以,为分割符将字符串"a,a,a,a,a,a" 切割成数组var_dump(implode(&#39;-&#39;, [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


4. Les tableaux simulent des structures de données communes

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

5. Instructions et précautions pour l'utilisation des tableaux php

  • 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, &#39;8&#39; => 3];$arr[false] = -20;
var_dump($arr); // [-20, 2, &#39;8&#39; => 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; // 标识符被转化为 &#39;bar&#39;var_dump($arr); // [-20, 2, 8 => 10, "" => 5, &#39;bar&#39; => 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-类型转换的判别


六、FAQ

  • 如何添加数组元素更为高效? 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!

Déclaration:
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