何らかの方法で配列をループし、各要素を条件でフィルタリングする必要があります。これは、さまざまな方法で実行できます。
while
、for
または など、必要なループを使用して配列をループしますforeach
。次に、条件を確認し、条件をunset()
満たさない場合は要素をチェックするか、条件を満たす要素を新しい配列に書き込みます。
ループ
//while loop
while(list($key, $value) = each($array)){
//condition
}
//for loop
$keys = array_keys($array);
for($counter = 0, $length = count($array); $counter < $length; $counter++){
$key = $keys[$counter];
$value = $array[$key];
//condition
}
//foreach loop
foreach($array as $key => $value){
//condition
}
調子
コメント//condition
があるループに条件を配置するだけです。条件は、必要なものをチェックするだけでunset()
、条件を満たさない要素を確認し、必要に応じて配列のインデックスを再array_values()
作成するか、条件を満たす新しい配列に要素を書き込むことができます。
//Pseudo code
//Use one of the two ways
if(condition){ //1. Condition fulfilled
$newArray[ ] = $value;
//↑ Put '$key' there, if you want to keep the original keys
//Result array is: $newArray
} else { //2. Condition NOT fulfilled
unset($array[$key]);
//Use array_values() after the loop if you want to reindex the array
//Result array is: $array
}
別の方法は、array_filter()
組み込み関数を使用することです。通常、単純なループを使用したメソッドとほとんど同じように機能します。
TRUE
要素を配列に保持したいFALSE
場合、および結果配列から要素を削除したい場合は、単に戻る必要があります。
//Anonymous function
$newArray = array_filter($array, function($value, $key){
//condition
}, ARRAY_FILTER_USE_BOTH);
//Function name passed as string
function filter($value, $key){
//condition
}
$newArray = array_filter($array, "filter", ARRAY_FILTER_USE_BOTH);
//'create_function()', NOT recommended
$newArray = array_filter($array, create_function('$value, $key', '/* condition */'), ARRAY_FILTER_USE_BOTH);
preg_grep()
array_filter()
正規表現のみを使用して配列をフィルタリングするという点だけに似ています。したがって、フィルターとして正規表現のみを使用でき、値またはキーによるコードでのみフィルター処理できるため、すべてを実行できるわけではありません。
PREG_GREP_INVERT
また、フラグを 3 番目のパラメーターとして渡して、結果を反転できることにも注意してください。
//Filter by values
$newArray = preg_grep("/regex/", $array);
共通条件
配列をフィルタリングするために使用される多くの一般的な条件があり、そのすべてを配列の値やキーに適用できます。ここにそれらのいくつかをリストします。
//Odd values
return $value & 1;
//Even values
return !($value & 1);
//NOT null values
return !is_null($value);
//NOT 0 values
return $value !== 0;
//Contain certain value values
return strpos($value, $needle) !== FALSE; //Use 'use($needle)' to get the var into scope
//Contain certain substring at position values
return substr($value, $position, $length) === $subString;
//NOT 'empty'(link) values
array_filter($array); //Leave out the callback parameter