次の配列があるとします。「are」という単語を削除するにはどうすればよいですか
(インデックスはランダムになる可能性があるためunset($words[2])
、オプションではありません)
$words= array("hi", "how", "are", "you", "doing");
//array_remove("are", $words); <== How to do this in php?
function array_remove($word, &$array)
{
if (($key = array_search('are', $array)) !== false) {
unset($array[$key]);
}
}
使用法:
$words = array("hi", "how", "are", "you", "doing");
array_remove('are', $words);
array_searchを使用してインデックスを検索し、unset を使用して削除できます
if (($index = array_search('are', $words)) !== false) {
unset($words[$index]);
}
array_search
アイテムが見つからない場合は false を返します。
また、「are」の複数のインスタンスを削除したい場合は、array_keysを試すことができます
foreach(array_keys($words,"are") as $index) {
unset($words[$index])
}
これにより、値が「are」の要素が単純に消えますが、この例では、配列にインデックス 2 が含まれなくなります。これにより、インデックスの反復で機能するループで問題が発生する可能性があります。これを削除するには、array_valuesを使用できます
$words = array_values($words);
そのための機能が必要な場合、これはコメントの説明とまったく同じです。
function array_remove($needle, & $haystack) {
foreach ($haystack as $key => $value) {
if ($value === $needle) {
unset($haystack[$key]);
break;
}
}
}
$words= array("hi", "how", "are", "you", "doing");
array_remove('are', $words);
echo '<pre>'; print_r($words);
関数で のすべてのインスタンスを削除する場合は、$needle
という行を削除するだけbreak;
です。