ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルで配列要素を検索するさまざまな方法のまとめ

PHP_PHP チュートリアルで配列要素を検索するさまざまな方法のまとめ

WBOY
WBOYオリジナル
2016-07-13 16:57:101249ブラウズ

PHP におけるデータクエリは 1 次元配列検索と多次元配列検索に分類できます。単純な 1 次元配列であれば、in_array、array_search、traversal を直接使用してインスタンス化できます。次元配列の場合は、他のメソッドを使用する必要があります。

1次元配列の場合、次のように操作できます

in_array '関数は配列内の指定された値を検索します。 in_array(value,array,type)type オプション。このパラメータを true に設定すると、検索されたデータの型と配列の値が同じであるかどうかがチェックされます。

array_key_exists 'array_key_exists() 関数は、指定されたキーが配列内に存在するかどうかを判断し、キーが存在する場合は true を返し、存在しない場合は false を返します。 array_key_exists(キー,配列)

array_search 'array_search() 関数は in_array() と同じで、配列内のキー値を検索します。値が見つかった場合は、一致する要素のキーが返されます。見つからない場合は false を返します。 array_search(値,配列,厳密)

この観点から、データ量が 1000 未満など、それほど多くない場合は、どのような検索方法も使用でき、ボトルネックにはなりません。 データ量が比較的多い場合には、array_key_exists の方が適切です。
もちろん、計算によれば、array_key_exists が占有するメモリは比較的大きくなります

配列に特定の要素が含まれているかどうかを確認するバイナリ メソッド、順方向および逆順と互換性あり、コード実装:

コードは次のとおりですコードをコピー

例 2

PHP 配列の i 番目に小さい要素を見つけます

$searchValue = (int)$_GET['key'];

関数検索(配列 $array, $value)

{
$max = count($array)-1;
$min = 0;
$isAscSort = $array[$min] <$array[$max];

ながら (TRUE) {

$sum = $min+$max;
$midKey = (int)($sum%2 == 1 ? ceil($sum/2) : $sum/2);

if ($max < $min) {

-1 を返します;
} else if ($value == $array[$midKey]) {
1 を返します;
} else if ($value > $array[$midKey]) {
$isAscSort ? $min = $midKey+1 : $max = $midKey-1;
} else if ($value <$array[$midKey]) {
$isAscSort ? $max = $midKey-1 : $min = $midKey+1;
}
}
}

$配列 = 配列(

「4」、「5」、「7」、「8」、「9」、「10」、「11」、「12」
);
// 正のシーケンス
エコー検索($array, $searchValue);

//逆順

rsort($array);
エコー検索($array, $searchValue);

コードは次のとおりです コードをコピー

#i 番目に小さい数値をランダムに選択し、ランダムなクイックソートを使用してそれを達成します

#要素交換
関数スワップ(&$arr, $i, $j) {
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}

#ランダムで分けます
関数randomized_pa​​rtition(&$arr, $begin, $end) {
$rand_inx = rand($begin, $end);
swap($arr, $begin, $rand_inx);
パーティションを返す($arr, $begin, $end);
}

#分けます
関数パーティション(&$arr, $begin, $end) {
#最初の要素を中心要素として使用します
$pivot = $begin;
$low = $begin;
$high = $end;

ながら ($low < $high) {
while ($low < $high && $arr[$low] <= $arr[$pivot]) {
$low++;
}

while ($low < $high && $arr[$high] >= $arr[$pivot]) {
$high--;
}

swap($arr, $low, $high);
}

#交換の中心要素
If ($arr[$pivot] < $arr[$low]) {
$low--;
}
swap($arr, $pivot, $low);
戻り $low;
}

#クイックソート、ここでは使用しません
関数 Quick_sort(&$arr, $begin, $end) {
$q =randomized_pa​​rtition($arr, $begin, $end);
If ($q > $begin) {
easy_sort($arr, $begin, $q - 1);
}
if ($q easy_sort($arr, $q + 1, $end);
}
}

#i 番目に小さい数字を選択してください
関数randomized_select(&$arr, $begin, $end, $i) {
if ($begin == $end) {
return $arr[$begin];
}

$q =randomized_pa​​rtition($arr, $begin, $end);
$k = $q - $begin + 1; #k は q
以下の要素の数を表します。
if ($k == $i) { #k=i の場合、q は i 番目に小さい要素の座標であることを意味します
return $arr[$q];
} else if ($i < $k) { #i の左側にあることを意味します returnrandomized_select($arr, $begin, $q - 1, $i);
} else { #i 番目に小さい要素は q の右側にあります このとき、右側の i-k 番目に小さい要素を探します
returnrandomized_select($arr, $q + 1, $end, $i - $k);
}
}

$arr = 配列(1, 5, 3, 7, 0, 0, 8, 4, 2, 9, 11);
$t =randomized_select($arr, 0, count($arr) - 1, 8);
print_r("8番目の最小要素: {$t}");
echo "
";
Quick_sort($arr, 0, count($arr) - 1);
print_r($arr);
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/631562.html技術記事 PHPにおけるデータクエリは、一次元配列検索と多次元配列検索に分類できます。単純な一次元配列であれば、例えば...
などのように、in_array、array_search、traversalを直接使用できます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。