PHP開発中、 Array_sliceは一般的に使用される配列操作関数の1つです。主にアレイからサブ配列を抽出するために使用されます。ただし、使用する場合、パラメーターとリターン結果の詳細に注意を払わない場合、予期しないバグを引き起こすのは簡単です。この記事では、実用的な例を備えたこの「ピット」を明らかにし、正しく避ける方法を教えてくれます。
array_slice(array $ array、int $ offset、?int $ length = null、bool $ preserve_keys = false):array
$配列:操作する元の配列
$ offset :場所を開始します
$の長さ:傍受する長さ
$ preserve_keys :元の配列のキー名を保持するかどうか(デフォルトはfalse 、つまり再インデックスです)
例を見てみましょう:
$data = [
'apple' => 1,
'banana' => 2,
'cherry' => 3,
'date' => 4,
];
$result = array_slice($data, 1, 2);
print_r($result);
次のものが出力されると思いますか?
Array
(
[banana] => 2
[cherry] => 3
)
実際、出力は次のようになります。
Array
(
[0] => 2
[1] => 3
)
キー名が失われるのはなぜですか?その理由は、4番目のパラメーター$ preserve_keysのデフォルト値がfalseであるため、キー名は0から始まるインデックスキーにリセットされるためです。
array_sliceを呼び出すときに、4番目のパラメーターにtrueを指定するだけです。
$result = array_slice($data, 1, 2, true);
print_r($result);
出力はあなたが望む通りになります:
Array
(
[banana] => 2
[cherry] => 3
)
この手順は、特に配列のキー名(フォームフィールド、構成ファイルなどの処理など)に依存している場合に重要です。このパラメーターを忘れると、完全なロジックエラーが発生する可能性があります。
たとえば、スライス結果を使用して、新しいキー価値構造を構築します。
foreach (array_slice($data, 1, 2) as $key => $val) {
echo "$key => $val\n";
}
出力が期待されるのは次のとおりです。
banana => 2
cherry => 3
しかし、実際の出力は次のとおりです。
0 => 2
1 => 3
これにより、特にある種の識別子として$キーを使用する場合、キー価値の依存性ロジックの一部が完全に失敗する可能性があります。
array_sliceを使用する前に、自問してください:
キー名は気になりますか? (連想配列の重要な名前は一般的に非常に重要です)
結果は、元の配列キーに関連するロジックに引き続き使用されますか?
答えが「はい」の場合は、必ず$ preserve_keys = trueを設定してください。
より安全なバージョンのカプセル化は、繰り返しの間違いを避けることができます:
function slice_assoc(array $array, int $offset, ?int $length = null): array {
return array_slice($array, $offset, $length, true);
}
次に使用してください:
$result = slice_assoc($data, 1, 2);
クリアで信頼性が高く、エラーがない。
多くのCMSおよびフレームワークでは、 Array_Sliceはバックグラウンドページネーションまたは構成配列処理で使用されます。キーが保持されていない場合、混乱を引き起こし、許可検証の脆弱性を引き起こす可能性があります。たとえば、特定のタイプの構成アイテムに対してページネーションインターセプトを行う場合、キーがconfig_idであり、整数インデックスにリセットされている場合、対応する構成は正常に一致しません。
PHP関数を使用するための詳細については、 https://gitbox.net/php-tipsを確認してください
関連タグ:
array_slice