web-dev-qa-db-ja.com

PHPで複数の値の配列を検索するにはどうすればよいですか?

重複している値からキーを取得する必要があります。私は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]);
21
Jens Törnell

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]
    }

  }
}
28
Adam Wright

array_search() では、次のようになります。

Needleがhaystackで2回以上見つかった場合、最初に一致したキーが返されます。一致するすべての値のキーを返すには、代わりに array_keys() をオプションのsearch_valueパラメータとともに使用します。

10
palindrom

次の関数呼び出しの組み合わせにより、すべての重複した値が得られます。

$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
7
Till Theis

array_search() を使用すると、whileループと次の回避策を使用してそれを実現できます。

_while (($key = array_search("2009-09-09", $list[0])) !== FALSE) {
  print($key);
  unset($list[0][$key]);
}
_

ソース: php.netのopenxboxでのキュー

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

4
kenorb

使用できるPHPマニュアルの状態はarray_search()関数ドキュメントの _Return Value_セクションにありますarray_keys() これを実現するには、2番目のパラメータを指定するだけです。

_$keys = array_keys($list[0], "2009-09-09");
_
2
soulmerge