So verwenden Sie PHP-Arrays

不言
Freigeben: 2023-04-02 21:42:02
Original
2389 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Verwendung von PHP-Arrays vor, die einen gewissen Referenzwert haben. Jetzt können Freunde in Not darauf zurückgreifen.

In diesem Tutorial werde ich einige praktische Beispiele verwenden Listet die häufig verwendeten Array-Funktionen in PHP auf bewährte Weise auf. Jeder PHP-Ingenieur sollte wissen, wie er sie verwendet und kombiniert, um schlankeren und besser lesbaren Code zu schreiben.

Darüber hinaus stellen wir eine Präsentation des relevanten Beispielcodes zur Verfügung, den Sie über den entsprechenden Link herunterladen und mit Ihrem Team teilen können, um ein stärkeres Team aufzubauen.

Erste Schritte

Beginnen wir mit einigen grundlegenden Array-Funktionen, die Array-Schlüssel und -Werte verarbeiten. array_combine() Als Mitglied der Array-Funktion wird es verwendet, um ein neues Array zu erstellen, indem der Wert eines Arrays als Schlüsselname und der Wert eines anderen Arrays als Wert verwendet wird:

<?php
$keys = [&#39;sky&#39;, &#39;grass&#39;, &#39;orange&#39;];
$values = [&#39;blue&#39;, &#39;green&#39;, &#39;orange&#39;];

$array = array_combine($keys, $values);

print_r($array);
// Array
// (
//     [sky] => blue
//     [grass] => green
//     [orange] => orange
// )
Nach dem Login kopieren

Das sollten Sie wissen Diese Funktion array_values() gibt den Wert im Array in Form eines Indexarrays zurück, array_keys() gibt den Schlüsselnamen des angegebenen Arrays zurück und die Funktion array_flip() besteht darin, den Schlüsselwert und den Schlüsselnamen auszutauschen im Array:

<?php

print_r(array_keys($array));// [&#39;sky&#39;, &#39;grass&#39;, &#39;orange&#39;]

print_r(array_values($array));// [&#39;blue&#39;, &#39;green&#39;, &#39;orange&#39;]

print_r(array_flip($array));
// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )
Nach dem Login kopieren

Vereinfachen Sie den Code

list()-Funktion, um genau zu sein, handelt es sich nicht um eine Funktion, sondern um eine Sprachstruktur, die a Werte in einem Array zuweisen kann Satz von Variablen in einem einzigen Vorgang. Die grundlegende Verwendung der Funktion list() ist beispielsweise unten angegeben:

<?php
// 定义数组
$array = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;];

// 不使用 list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// 使用 list() 函数
list($a, $b, $c) = $array;
Nach dem Login kopieren

Diese Sprachstruktur wird mit preg_split() oder explode( ) Diese Art von Funktion ist effektiver. Wenn Sie einige Werte nicht definieren müssen, können Sie die Zuweisung einiger Parameter direkt überspringen:

$string = &#39;hello|wild|world&#39;;

list($hello, , $world) = explode(&#39;|&#39;, $string);
echo $hello, &#39; &#39;, $world;
Nach dem Login kopieren

Darüber hinaus list( ) kann auch für foreach-Traversal verwendet werden, diese Verwendung kann diese Sprachstruktur besser nutzen:

$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;

    echo $c, &#39;, &#39;;
}
Nach dem Login kopieren
Anmerkung des Übersetzers: Die Sprachstruktur list() ist nur auf numerische Werte anwendbar indizierte Arrays, und der Standardindex ist von Beginnt mit 0 und kann nicht mit assoziativen Arrays verwendet werden, siehe Dokumentation.

Und mit der Funktion extract() können Sie ein assoziatives Array in eine Variable (Symboltabelle) exportieren. Für jedes Element im Array wird sein Schlüsselname als Variablenname verwendet und der Wert der Variablen ist der Wert des entsprechenden Elements:

<?php
$array = [
    &#39;clothes&#39; => &#39;t-shirt&#39;,
    &#39;size&#39; => &#39;medium&#39;,
    &#39;color&#39; => &#39;blue&#39;,
];

extract($array);

echo $clothes, &#39; &#39;, $size, &#39; &#39;, $color;
Nach dem Login kopieren

Beachten Sie, dass bei der Verarbeitung von Benutzerdaten (z. B. angefordert) data) Die Funktion extract() ist eine sichere Funktion, daher ist es derzeit besser, bessere Flag-Typen wie EXTR_IF_EXISTS und EXTR_PREFIX_ALL zu verwenden.

extract() Die Umkehroperation der Funktion ist die Funktion compact(), die zum Erstellen assoziativer Arrays anhand von Variablennamen verwendet wird:

<?php
$clothes = &#39;t-shirt&#39;;
$size = &#39;medium&#39;;
$color = &#39;blue&#39;;

$array = compact(&#39;clothes&#39;, &#39;size&#39;, &#39;color&#39;);
print_r($array);

// Array
// (
//     [clothes] => t-shirt
//     [size] => medium
//     [color] => blue
// )
Nach dem Login kopieren

Filterfunktion

PHP bietet eine tolle Funktion zum Filtern von Arrays, array_filter(). Verwenden Sie das zu verarbeitende Array als ersten Parameter der Funktion, und der zweite Parameter ist eine anonyme Funktion. Wenn Sie möchten, dass die Elemente im Array die Validierung bestehen, geben Sie in der anonymen Funktion true zurück, andernfalls geben Sie false zurück: Die Funktion

<?php

$numbers = [20, -3, 50, -99, 55];

$positive = array_filter($numbers, function ($number) {
    return $number > 0;
});

print_r($positive);// [0 => 20, 2 => 50, 4 => 55]
Nach dem Login kopieren

unterstützt nicht nur das Filtern nach Wert . Sie können auch ARRAY_FILTER_USE_KEY oder ARRAY_FILTER_USE_BOTH als dritten Parameter verwenden, um anzugeben, ob der Schlüsselwert des Arrays oder sowohl der Schlüsselwert als auch der Schlüsselname als Parameter der Rückruffunktion verwendet werden sollen.

Sie können auch eine Rückruffunktion in der Funktion array_filter() definieren, um Nullwerte zu entfernen:

<?php
$numbers = [-1, 0, 1];

$not_empty = array_filter($numbers);

print_r($not_empty);// [0 => -1, 2 => 1]
Nach dem Login kopieren

Sie können die Funktion array_unique() verwenden, um eindeutige Werte zu erhalten ​aus dem Array-Wertelement. Beachten Sie, dass diese Funktion den Schlüsselnamen des eindeutigen Elements im ursprünglichen Array behält: Die Funktion

<?php
$array = [1, 1, 1, 1, 2, 2, 2, 3, 4, 5, 5];

$uniques = array_unique($array);

print_r($uniques);
print_r($array);
// Array
// (
//     [0] => 1
//     [4] => 2
//     [7] => 3
//     [8] => 4
//     [9] => 5
// )
Nach dem Login kopieren

array_column() kann den Wert der angegebenen Spalte aus einem mehrdimensionalen Array (mehrdimensional) abrufen, z B. Antworten aus einer SQL-Datenbank oder CSV-Dateiimportdaten erhalten. Übergeben Sie einfach das Array und den angegebenen Spaltennamen:

<?php
$array = [
    [&#39;id&#39; => 1, &#39;title&#39; => &#39;tree&#39;],
    [&#39;id&#39; => 2, &#39;title&#39; => &#39;sun&#39;],
    [&#39;id&#39; => 3, &#39;title&#39; => &#39;cloud&#39;],
];

$ids = array_column($array, &#39;id&#39;);

print_r($ids);// [1, 2, 3]
Nach dem Login kopieren

Ab PHP 7 ist array_column leistungsfähiger, da es Arrays mit Objekten unterstützt, sodass es sich beim Umgang mit Array-Modellen ändert . Es ist noch einfacher:

<?php
$cinemas = Cinema::find()->all();
$cinema_ids = array_column($cinemas, &#39;id&#39;); // php7 forever!
Nach dem Login kopieren

Array-Traversal-Verarbeitung

Mit array_map() können Sie eine Callback-Methode für jedes Element im Array ausführen. Sie können ein neues Array basierend auf einem bestimmten Array erhalten, indem Sie einen Funktionsnamen oder eine anonyme Funktion übergeben:

<?php
$cities = [&#39;Berlin&#39;, &#39;KYIV&#39;, &#39;Amsterdam&#39;, &#39;Riga&#39;];
$aliases = array_map(&#39;strtolower&#39;, $cities);

print_r($aliases);// [&#39;berlin&#39;, &#39;kyiv, &#39;amsterdam&#39;, &#39;riga&#39;]

$numbers = [1, -2, 3, -4, 5];
$squares = array_map(function ($number) {
    return $number ** 2;
}, $numbers);

print_r($squares);// [1, 4, 9, 16, 25]
Nach dem Login kopieren

Es gibt ein Gerücht über diese Funktion, dass Sie den Array-Schlüsselnamen und den Schlüsselwert nicht an die Callback-Funktion übergeben können gleichzeitig. Aber wir werden es jetzt aufschlüsseln:

<?php
$model = [&#39;id&#39; => 7, &#39;name&#39; => &#39;James&#39;];
$res = array_map(function ($key, $value) {
    return $key . &#39; is &#39; . $value;
}, array_keys($model), $model);

print_r($res);
// Array
// (
//     [0] => id is 7
//     [1] => name is James
// )
Nach dem Login kopieren

Aber es ist einfach hässlich, wenn man es so macht. Es ist besser, stattdessen die Funktion array_walk() zu verwenden. Diese Funktion verhält sich ähnlich wie array_map(), funktioniert aber völlig anders. Zuerst wird das Array als Referenz übergeben, sodass array_walk() kein neues Array erstellt, sondern das ursprüngliche Array direkt ändert. Als Quellarray können Sie also den Wert des Arrays mithilfe der Referenzübergabemethode an die Rückruffunktion übergeben und einfach den Schlüsselnamen des Arrays direkt übergeben:

<?php
$fruits = [
    &#39;banana&#39; => &#39;yellow&#39;,
    &#39;apple&#39; => &#39;green&#39;,
    &#39;orange&#39; => &#39;orange&#39;,
];

array_walk($fruits, function (&$value, $key) {
    $value = $key . &#39; is &#39; . $value;
});

print_r($fruits);
Nach dem Login kopieren

Array-Verbindungsvorgang

in PHP Der beste Weg, Arrays zusammenzuführen, ist die Verwendung der Funktion array_merge(). Alle Array-Optionen werden in einem Array zusammengeführt und Werte mit demselben Schlüssel werden durch den letzten Wert überschrieben:

<?php
$array1 = [&#39;a&#39; => &#39;a&#39;, &#39;b&#39; => &#39;b&#39;, &#39;c&#39; => &#39;c&#39;];
$array2 = [&#39;a&#39; => &#39;A&#39;, &#39;b&#39; => &#39;B&#39;, &#39;D&#39; => &#39;D&#39;];
 
$merge = array_merge($array1, $array2);
print_r($merge);
// Array
// (
//     [a] => A
//     [b] => B
//     [c] => c
//     [D] => D
// )
Nach dem Login kopieren
译注:有关合并数组操作还有一个「+」号运算符,它和 array_merge() 函数的功能类似都可以完成合并数组运算,但是结果有所不同,可以查看 PHP 合并数组运算符 + 与 array_merge 函数 了解更多细节。

为了实现从数组中删除不在其他数组中的值(译注:计算差值),使用 array_diff()。还可以通过 array_intersect() 函数获取所有数组都存在的值(译注:获取交集)。接下来的示例演示它们的使用方法:

<?php
$array1 = [1, 2, 3, 4];
$array2 = [3, 4, 5, 6];

$diff = array_diff($array1, $array2);
$intersect = array_intersect($array1, $array2);

print_r($diff); // 差集 [0 => 1, 1 => 2]
print_r($intersect); //交集 [2 => 3, 3 => 4]
Nach dem Login kopieren

数组的数学运算

使用 array_sum() 对数组元素进行求和运算,array_product 对数组元素执行乘积运算,或者使用 array_reduce() 处理自定义运算规则:

<?php

$numbers = [1, 2, 3, 4, 5];

print_r(array_sum($numbers));// 15

print_r(array_product($numbers));// 120

print_r(array_reduce($numbers, function ($carry, $item) {
    return $$carry ? $carry / $item : 1;
}));// 0.0083 = 1/2/3/4/5
Nach dem Login kopieren

为了实现统计数组中值的出现次数,可以使用 array_count_values() 函数。它将返回一个新数组,新数组键名为待统计数组的值,新数组的值为待统计数组值的出现次数:

<?php

$things = [&#39;apple&#39;, &#39;apple&#39;, &#39;banana&#39;, &#39;tree&#39;, &#39;tree&#39;, &#39;tree&#39;];
$values = array_count_values($things);

print_r($values);

// Array
// (
//     [apple] => 2
//     [banana] => 1
//     [tree] => 3
// )
Nach dem Login kopieren

生成数组

需要以给定值生成固定长度的数组,可以使用 array_fill() 函数:

<?php
$bind = array_fill(0, 5, &#39;?&#39;);
print_r($bind);
Nach dem Login kopieren

根据范围创建数组,如小时或字母,可以使用 range() 函数:

<?php
$letters = range(&#39;a&#39;, &#39;z&#39;);
print_r($letters); // [&#39;a&#39;, &#39;b&#39;, ..., &#39;z&#39;]

$hours = range(0, 23);
print_r($hours); // [0, 1, 2, ..., 23]
Nach dem Login kopieren

为了实现获取数组中的部分元素 - 比如,获取前三个元素 - 使用 array_slice() 函数:

<?php
$numbers = range(1, 10);
$top = array_slice($numbers, 0, 3);

print_r($top);// [1, 2, 3]
Nach dem Login kopieren

排序数组

首先谨记 PHP 中有关排序的函数都是 引用传值 的,排序成功返回 true 排序失败返回 false。排序的基础函数是 sort() 函数,它执行排序后的结果不会保留原索引顺序。排序函数可以归类为以下几类:

  • a 保持索引关系进行排序

  • k 依据键名排序

  • r 对数组进行逆向排序

  • u 使用用户自定义排序规则排序

你可以从下表看到这些排序函数:


akru
aasort
arsortuasort
k
ksortkrsort
rarsortkrsortrsort
uuasort

usort

数组函数的组合使用

数组处理的艺术是组合使用这些数组函数。这里我们通过 array_filter()array_map() 函数仅需一行代码就可以完成空字符截取和去控制处理:

<?php
$values = [&#39;say&#39;, &#39;  bye&#39;, &#39;&#39;, &#39; to&#39;, &#39; spaces  &#39;, &#39;    &#39;];
$words = array_filter(array_map(&#39;trim&#39;, $values));

print_r($words);// [&#39;say&#39;, &#39;bye&#39;, &#39;to&#39;, &#39;spaces&#39;]
Nach dem Login kopieren

依据模型数组创建 id 和 title 数据字典,我们可以结合使用 array_combine()array_column() 函数:

<?php
$models = [$model, $model, $model];

$id_to_title = array_combine(
    array_column($models, &#39;id&#39;),
    array_column($models, &#39;title&#39;)
);

print_r($id_to_title);
Nach dem Login kopieren
译注:提供一个 可运行的版本。

为了实现获取出现频率最高的数组元素,我们可以使用 array_count_values()arsort()array_slice() 这几个函数:

<?php

$letters = [&#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;b&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;d&#39;, &#39;d&#39;, &#39;d&#39;, &#39;d&#39;];

$values = array_count_values($letters);
arsort($values);
$top = array_slice($values, 0, 3);

print_r($top);
Nach dem Login kopieren

还可以轻易的通过 array_sum()array_map() 函数仅需数行就能完成计算订单的价格:

<?php
$order = [
    [&#39;product_id&#39; => 1, &#39;price&#39; => 99, &#39;count&#39; => 1],
    [&#39;product_id&#39; => 2, &#39;price&#39; => 50, &#39;count&#39; => 2],
    [&#39;product_id&#39; => 2, &#39;price&#39; => 17, &#39;count&#39; => 3],
];

$sum = array_sum(array_map(function ($product_row) {
    return $product_row[&#39;price&#39;] * $product_row[&#39;count&#39;];
}, $order));

print_r($sum);// 250
Nach dem Login kopieren

总结

正如你所看到的那样,掌握主要的数组函数可以是我们的代码更精简且易于阅读。当然,PHP 提供了比列出来的要多得多的数组函数,并且还提供了额外参数及标识参数,但是我觉得本教程中已经涵盖了 PHP 开发者应该掌握的最基本的一些。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

PHP缓存区ob的介绍

为多个PHP-FPM容器量身打造单一Nginx镜像的方法

Das obige ist der detaillierte Inhalt vonSo verwenden Sie PHP-Arrays. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!