質問

重複している値からキーを取得する必要があります。 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() では、読める:

  

干し草の山で針が見つかった場合more   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

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

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

出典: php.netのopenxboxで合図

一次元配列の場合、次の関数を使用してそれを実現できます( 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()関数ドキュメントのcode> Return Value セクション。 array-keys.php "rel =" nofollow noreferrer "> array_keys() でこれを実現します。 2番目のパラメーターを指定するだけです。

$keys = array_keys($list[0], "2009-09-09");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top