PHP配列の使用方法

不言
リリース: 2023-04-02 21:42:02
オリジナル
2460 人が閲覧しました

この記事では、主に PHP 配列の使用方法を紹介します。これには、特定の参考値があります。今、それをみんなに共有します。必要な友人は、それを参照できます。

このチュートリアルでは、いくつかの実践的な例を使用します。 PHP で一般的に使用される配列関数をベスト プラクティスの方法でリストします。すべての PHP エンジニアは、それらの使用方法と、それらを組み合わせて、無駄がなく読みやすいコードを作成する方法を知っておく必要があります。

さらに、関連するサンプル コードのプレゼンテーションも提供しています。関連するリンクからダウンロードしてチームと共有し、より強力なチームを構築できます。

はじめに

配列のキーと値を扱ういくつかの基本的な配列関数から始めましょう。 array_combine() は、配列関数のメンバーとして、1 つの配列の値をキー名として使用し、別の配列の値をその値として使用して、新しい配列を作成するために使用されます。 array_values() 関数はインデックス付き配列の形式で配列内の値を返し、array_keys() は指定された配列のキー名を返し、array_flip() 関数の機能はキー値と配列内のキー名:

<?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
// )
ログイン後にコピー

code

list() 関数を簡略化します。正確に言うと、これは関数ではなく、配列に値を代入できる言語構造です。 1 回の操作で一連の変数に変換します。たとえば、

list()

関数の基本的な使用法を以下に示します。

<?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
// )
ログイン後にコピー
この言語構​​造は、

preg_split()

または explode( ) このタイプの関数はより効果的です。一部の値を定義する必要がない場合は、いくつかのパラメーターの割り当てを直接スキップできます:

<?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;
ログイン後にコピー
さらに、

list( )

も使用できますforeach トラバーサル、この使用法は、この言語構​​造をよりよく活用できます:

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

list($hello, , $world) = explode(&#39;|&#39;, $string);
echo $hello, &#39; &#39;, $world;
ログイン後にコピー
翻訳者注: list() 言語構造は数値インデックスにのみ適用されます。デフォルトのインデックスは

0
から始まり、連想配列では使用できません。ドキュメントを参照してください。 そして、extract() 関数を使用すると、連想配列を変数 (シンボル テーブル) にエクスポートできます。配列内の各要素について、そのキー名が作成する変数名として使用され、変数の値が対応する要素の値になります。
$arrays = [[1, 2], [3, 4], [5, 6]];

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

    echo $c, &#39;, &#39;;
}
ログイン後にコピー

ユーザー データ (例:要求されたデータ)

extract()

関数は安全な関数であるため、現時点では、EXTR_IF_EXISTSEXTR_PREFIX_ALL などのより適切なフラグ タイプを使用することをお勧めします。

extract()

この関数の逆演算は、compact() 関数です。この関数は、変数名によって連想配列を作成するために使用されます。

<?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;
ログイン後にコピー
Filter 関数

PHP は、配列をフィルタリングするための素晴らしい関数 array_filter() を提供します。処理対象の配列を関数の第一引数として使用し、第二引数は無名関数とします。配列内の要素が検証に合格するようにしたい場合、匿名関数は

true

を返し、それ以外の場合は false を返します。

<?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
// )
ログイン後にコピー
関数は、値によるフィルタリングをサポートするだけではありません。

ARRAY_FILTER_USE_KEY

または ARRAY_FILTER_USE_BOTH を 3 番目のパラメーターとして使用して、コールバック関数のパラメーターとして配列のキー値を使用するか、キー値とキー名の両方を使用するかを指定することもできます。 また、

array_filter()

関数でコールバック関数を定義して null 値を削除することもできます:

<?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]
ログイン後にコピー
array_unique() 関数を使用して一意の値を取得できます配列値要素から。この関数は、元の配列の一意の要素のキー名を保持することに注意してください。

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

$not_empty = array_filter($numbers);

print_r($not_empty);// [0 => -1, 2 => 1]
ログイン後にコピー

array_column() 関数は、次のような多次元配列 (多次元) から指定された列の値を取得できます。 SQL データベースまたは CSV ファイルのインポート データから回答を取得する場合と同様です。配列と指定された列名を渡すだけです:

<?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
// )
ログイン後にコピー

PHP 7 以降、

array_column

はオブジェクトを含む配列のサポートを開始するため、より強力になり、配列モデルを扱うときに変更されます。より簡単:

<?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]
ログイン後にコピー
配列トラバーサル処理

array_map() を使用すると、配列内の各要素に対してコールバック メソッドを実行できます。関数名または匿名関数を渡すことで、指定された配列に基づいて新しい配列を取得できます。

<?php
$cinemas = Cinema::find()->all();
$cinema_ids = array_column($cinemas, &#39;id&#39;); // php7 forever!
ログイン後にコピー

この関数については、配列のキー名とキー値を渡すことができないという噂もあります。

<?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]
ログイン後にコピー

しかし、この方法で行うのは本当に醜いです。代わりに array_walk() 関数を使用することをお勧めします。この関数は

array_map()

と同様に動作しますが、動作原理はまったく異なります。まず、配列は参照によって渡されるため、array_walk() は新しい配列を作成せず、元の配列を直接変更します。そのため、ソース配列として、参照渡しメソッドを使用して配列の値をコールバック関数に渡し、配列のキー名を直接渡すだけです。

<?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
// )
ログイン後にコピー
Array 接続操作

PHP の場合 配列をマージする最良の方法は、array_merge() 関数を使用することです。すべての配列オプションは 1 つの配列にマージされ、同じキー名の値は最後の値で上書きされます:

<?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
// )
ログイン後にコピー
译注:有关合并数组操作还有一个「+」号运算符,它和 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]
ログイン後にコピー

数组的数学运算

使用 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
ログイン後にコピー

为了实现统计数组中值的出现次数,可以使用 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
// )
ログイン後にコピー

生成数组

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

<?php
$bind = array_fill(0, 5, &#39;?&#39;);
print_r($bind);
ログイン後にコピー

根据范围创建数组,如小时或字母,可以使用 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]
ログイン後にコピー

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

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

print_r($top);// [1, 2, 3]
ログイン後にコピー

排序数组

首先谨记 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;]
ログイン後にコピー

依据模型数组创建 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);
ログイン後にコピー
译注:提供一个 可运行的版本。

为了实现获取出现频率最高的数组元素,我们可以使用 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);
ログイン後にコピー

还可以轻易的通过 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
ログイン後にコピー

总结

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

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

相关推荐:

PHP缓存区ob的介绍

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

以上がPHP配列の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート