PHP は強力なプログラミング言語として豊富なデータ構造を備えており、その中で 2 次元配列が一般的に使用されるデータ構造です。日常の開発では、重要なデータを見つけるために 2 次元配列を走査する必要があることがよくあります。ただし、ネストされたループが各走査に使用される場合、時間の複雑さは非常に高くなります。この記事では、2次元配列のキー値を1ループで求める方法を紹介します。
2 次元配列は、複数の配列を含み、要素を行と列に編成する特別なタイプの配列です。 2 次元配列は、複数の 1 次元配列で構成される行列と考えることができ、各要素には行インデックスと列インデックスによってアクセスできます。 PHP では、2 次元配列は次の方法で定義できます。
$arr = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9) );
上記のコードは、3 つの 1 次元配列を含む $arr 2 次元配列を定義します。各 1 次元配列には 3 つの配列があります。要素。
従来の 2 次元配列走査方法では、通常、2 つのネストされたループを使用する必要があります。1 つは行の走査用で、1 つは行の走査用です。もう 1 つは列を反復処理するために使用されます。例:
foreach ($arr as $key1 => $value1) { foreach ($value1 as $key2 => $value2) { if ($value2 == $target) { echo "关键值所在的行为:" . $key1 . "<br>"; echo "关键值所在的列为:" . $key2 . "<br>"; } } }
上記のコードでは、foreach ループを使用して、$arr 配列内の各要素を反復処理します。最初のループは行を反復し、2 番目のループは列を反復します。対象要素 $target が見つかったら、その要素が存在する行と列を出力します。
ただし、このメソッドの時間計算量は $O(n^2)$ です。つまり、配列サイズが増加すると、ループの数が指数関数的に増加します。
次に、2次元配列のキー値を1回のループで見つけることができる、より効率的な方法を紹介します。ループ。この方法は、PHP によって提供されるいくつかの配列関数に基づいており、時間計算量が $O(n)$ であるという利点があります。
まず、PHP の array_map 関数を使用して 2 次元配列を 1 次元配列に変換し、次に array_search 関数を使用して 1 次元配列内のターゲット値を見つける必要があります。コードは次のとおりです:
// 将二维数组转成一维数组 $array = array_reduce($arr, 'array_merge', array()); // 在一维数组中查找目标值 $key = array_search($target, $array); // 计算目标值所在的行和列 $row = floor($key / count($arr[0])); $col = $key % count($arr[0]); echo "关键值所在的行为:" . $row . "<br>"; echo "关键值所在的列为:" . $col . "<br>";
上記のコードでは、array_reduce 関数を使用して 2 次元配列を 1 次元配列に変換し、array_search 関数は 1 次元配列から目的の値を検索します。そして、 の 2 次元配列の行と列のターゲット値を計算します。
この方法の計算量は $O(n)$ で、従来の方法と比較してパフォーマンスが大幅に向上しました。
この記事では、2 次元配列のキー値を 1 つのループで見つけることができる効率的な方法を紹介します。 PHP が提供するいくつかの配列関数を使用することにより、時間計算量が $O(n^2)$ から $O(n)$ に軽減され、プログラムのパフォーマンスが大幅に向上しました。この記事が、PHP での 2 次元配列の走査と検索に役立つことを願っています。
以上がPHP は 1 つのループで 2 次元配列内のキーを見つけます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。