重複している値からキーを取得する必要があります。私はarray_searchを使用しようとしましたが、うまくいきましたが、ヒットとして最初の値しか得られませんでした。
重複する値(この場合は0と2)から両方のキーを取得する必要があります。検索結果の配列としての出力は適切です。
これを行うPHP関数はありますか、それとも複数のループを作成する必要がありますか?
$list[0][0] = "2009-09-09";
$list[0][1] = "2009-05-05";
$list[0][2] = "2009-09-09";
$list[1][0] = "first-paid";
$list[1][1] = "1";
$list[1][2] = "last-unpaid";
echo array_search("2009-09-09",$list[0]);
array_keys に検索値が必要です
array_keys($list[0], "2009-09-09");
これにより、指定した値を持つキーの配列が返されます。この場合は[0、2]です。重複も検索したい場合は、最初に array_unique でパスを作成し、次に元の配列でarray_keysを使用してその配列を反復できます。長さが1より大きい配列を返すものはすべて複製であり、結果は複製が格納されるキーになります。何かのようなもの...
$uniqueKeys = array_unique($list[0])
foreach ($uniqueKeys as $uniqueKey)
{
$v = array_keys($list[0], $uniqueKey);
if (count($v) > 1)
{
foreach ($v as $key)
{
// Work with $list[0][$key]
}
}
}
array_search()
では、次のようになります。
Needleがhaystackで2回以上見つかった場合、最初に一致したキーが返されます。一致するすべての値のキーを返すには、代わりに
array_keys()
をオプションのsearch_value
パラメータとともに使用します。
次の関数呼び出しの組み合わせにより、すべての重複した値が得られます。
$a = array(1, 1, 2, 3, 4, 5, 99, 2, 5, 2);
$unique = array_unique($a); // preserves keys
$diffkeys = array_diff_key($a, $unique);
$duplicates = array_unique($diffkeys);
echo 'Duplicates: ' . join(' ', $duplicates) . "\n"; // 1 2 5
array_search()
を使用すると、while
ループと次の回避策を使用してそれを実現できます。
_while (($key = array_search("2009-09-09", $list[0])) !== FALSE) {
print($key);
unset($list[0][$key]);
}
_
1多次元配列の場合、次の関数を使用してそれを実現できます( array_keys()
の代わりに):
_function array_isearch($str, $array){
$found = array();
foreach ($array as $k => $v) {
if (strtolower($v) == strtolower($str)) {
$found[] = $k;
}
}
return $found;
}
_
ソース: robertark、php.net
使用できるPHPマニュアルの状態はarray_search()
関数ドキュメントの _Return Value
_セクションにありますarray_keys()
これを実現するには、2番目のパラメータを指定するだけです。
_$keys = array_keys($list[0], "2009-09-09");
_