23

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

6 に答える 6

35

検索値を持つ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]
    }

  }
}
于 2009-07-31T13:46:59.820 に答える
12

私たちはarray_search()読むことができます:

針が干し草の山で複数回見つかった場合、最初に一致したキーが返されます。一致するすべての値のキーを返すには、代わりarray_keys()にオプションのsearch_valueパラメーターを使用します。

于 2009-07-31T13:46:11.617 に答える
8

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

$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
于 2009-07-31T14:31:09.147 に答える
4

ループと次の回避策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

于 2015-11-08T19:07:04.757 に答える
2

PHPのマニュアルには、これを実現するために使用できる関数ドキュメントのReturn Valueセクションがarray_search()array_keys()記載されています。2番目のパラメーターを指定する必要があります。

$keys = array_keys($list[0], "2009-09-09");
于 2009-07-31T13:49:25.077 に答える
0
$userdb=Array
(
    (0) => Array
        (
            (uid) => '100',
            (name) => 'Sandra Shush',
            (url) => 'urlof100'
        ),
);

$key = array_search(100, array_column($userdb, 'uid'));
于 2021-06-19T11:10:15.740 に答える