配列に存在する値を見つける方法と削除する方法。これを行うためにPHPの組み込み配列が機能する場合。削除した後、連続したインデックスの順序が必要です。誰でも私を助けてください知っています。
配列内の要素を検索するには、array_search
関数を使用し、配列から要素を削除するには、unset
関数を使用できます。例:
<?php
$hackers = array ('Alan Kay', 'Peter Norvig', 'Linus Trovalds', 'Larry Page');
print_r($hackers);
// Search
$pos = array_search('Linus Trovalds', $hackers);
echo 'Linus Trovalds found at: ' . $pos;
// Remove from array
unset($hackers[$pos]);
print_r($hackers);
?>
参照できるのは、 http://www.php.net/manual/en/ref.array.php 配列関連の関数です。
<?php
$my_array = array('sheldon', 'leonard', 'howard', 'penny');
$to_remove = array('howard');
$result = array_diff($my_array, $to_remove);
?>
最初に配列のキーを見つける必要があります。これは array_search() を使用して行うことができます
完了したら、 nset() を使用します
<?php
$array = array( 'Apple', 'orange', 'pear' );
unset( $array[array_search( 'orange', $array )] );
?>
上記のコードのいずれかを使用する場合に備えて、array_search
は、 "neestack"が "haystack"に見つからない場合にFALSEを返します。したがって、これらのサンプルは最初の(ゼロインデックスの)アイテムの設定を解除します。代わりにこれを使用してください:
<?php
$haystack = Array('one', 'two', 'three');
if (($key = array_search('four', $haystack)) !== FALSE) {
unset($haystack[$key]);
}
var_dump($haystack);
上記の例は次を出力します:
Array
(
[0] => one
[1] => two
[2] => three
)
そしてそれは良いことです!
このソリューションは、複数の発生を削除する@Peterのソリューションと、最初の発生を削除する@chynoソリューションの組み合わせです。それは私が使用しているものです。
/**
* @param array $haystack
* @param mixed $value
* @param bool $only_first
* @return array
*/
function array_remove_values(array $haystack, $needle = null, $only_first = false)
{
if (!is_bool($only_first)) { throw new Exception("The parameter 'only_first' must have type boolean."); }
if (empty($haystack)) { return $haystack; }
if ($only_first) { // remove the first found value
if (($pos = array_search($needle, $haystack)) !== false) {
unset($haystack[$pos]);
}
} else { // remove all occurences of 'needle'
$haystack = array_diff($haystack, array($needle));
}
return $haystack;
}
こちらもご覧ください: PHP配列の値による削除(キーではない)
言及されていない関数の1つはarray_filter
です。各要素を引数として取り、その要素が残るか削除される場合はtrueまたはfalseを返すコールバック関数を渡す必要があります。これには、重複する値を削除するという利点もあります。
次のように使用できます。
$myArray = array('one', 'two', 'deleteme', 'three');
$output = array_filter($myArray, function($val) { return $val != 'deleteme'; });
配列のインデックスを再作成する場合は、次のように結果をarray_values
に渡すことができます。
$output = array_values($output);
まず、他の人が言及したように、以下に示すように、「 array_search() 」と「 nset() 」メソッドを使用します。
<?php
$arrayDummy = array( 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg' );
unset( $arrayDummy[array_search( 'dddd', $arrayDummy )] ); // Index 3 is getting unset here.
print_r( $arrayDummy ); // This will show the indexes as 0, 1, 2, 4, 5, 6.
?>
ここで、配列値を並べ替えずに同じ配列のインデックスを再作成するには、以下に示すように「 array_values() 」メソッドを使用する必要があります。
<?php
$arrayDummy = array_values( $arrayDummy );
print_r( $arrayDummy ); // Now, you will see the indexes as 0, 1, 2, 3, 4, 5.
?>
それが役に立てば幸い。
これは私がそれをする方法です:
$terms = array('BMW', 'Audi', 'Porsche', 'Honda');
// -- purge 'make' Porsche from terms --
if (!empty($terms)) {
$pos = '';
$pos = array_search('Porsche', $terms);
if ($pos !== false) unset($terms[$pos]);
}