PHP配列の使用方法

不言
不言オリジナル
2018-07-09 10:08:002461ブラウズ

この記事では、主に 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() 函数。它将返回一个新数组,新数组键名为待统计数组的值,新数组的值为待统计数组值的出现次数:

41cd024259fee57a3f70060824ab3c97 2
//     [banana] => 1
//     [tree] => 3
// )

生成数组

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

8820f44454f0fd2ffffa31f308b79687 1, 'price' => 99, 'count' => 1],
    ['product_id' => 2, 'price' => 50, 'count' => 2],
    ['product_id' => 2, 'price' => 17, 'count' => 3],
];

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

print_r($sum);// 250

总结

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

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

相关推荐:

PHP缓存区ob的介绍

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

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。