1

配列内で最後に一致した値のキーをフェッチすることをどのように推奨しますか?

$arr = array(
     0 => 0,
     1 => 1,
     2 => 2,
     3 => 3,
     4 => 4,
     5 => 5,
     6 => 5,
     7 => 5,
     8 => 5,
     9 => 5, // <--- this is the key I'm after!
    10 => 6,
    11 => 7,
    12 => 8,
    13 => 9,
    14 => 10,
    15 => 11);

function returnLastMatching($haystack,$needle) {
    // return 9
}

echo returnLastMatching($arr,5);  // "9"
4

9 に答える 9

2

次のことを試してください。

$last_key = -1;
$foreach ($haystack as $key => $value) {
    if ($value == $needle) {
        $last_key = $key;
    }
}

値 = 針のたびに、最後の要素が上書きされ、キーが保存されます。最終的には最後の要素になります。

== ボラが提案したように ==

function returnLastMatching($haystack,$needle) {
    return array_pop(array_keys($haystack, $needle));
}
于 2013-09-11T07:43:15.107 に答える
1
function returnLastMatching($haystack,$needle) {
    return array_pop(array_keys($haystack, $needle));
}
于 2013-09-11T07:44:58.060 に答える
1

最初の解決策:

array_search()とを使用したこのソリューション でarray_reverse()は、最初に配列を逆にしてから、針に一致する最初のキーを取得します。

function returnLastMatching($haystack,$needle) {
  return   array_search($needle,array_reverse($haystack, true));
}

2番目の解決策:

使用array_keys()して、needle に一致するすべてのキーを取得し、このキーの配列から最後の要素を取得します。  

   function returnLastMatching($haystack,$needle) {

      return end(array_keys( $haystack, $needle));
  }
于 2013-09-11T07:45:10.690 に答える
1
$lastkey = false;
foreach($haystick as $key => $val) {
    if($val === $needle) $lastkey = $key;
}
return $lastkey;

これはヘイスティックの最後まで繰り返されるため、少なくとも 1 つ存在する場合は最後のキーを返し、存在しない場合は false を返します。

于 2013-09-11T07:45:48.013 に答える
1

foreach コンストラクトには 2 つの可能なシグネチャがあり、そのうちの 1 つは現在の要素のキー値も提供します。

function returnLastMatching($haystack,$needle) {
    foreach (array_reverse($haystack) as $k => $val) 
        if ($val == $needle) return $k;
    // instead of
    // foreach ($haystack as $val)...
}

最後の要素を取得するにはarray_reverse、配列を foreach に渡すときに呼び出しを追加します。

于 2013-09-11T07:41:47.883 に答える
1

使用できますarray_keys

$keys = array_keys($arr, 5); //will return all matched keys
echo end($keys); //will output the last key it was matched with
于 2013-09-11T07:51:06.383 に答える
0

echo returnLastMatching($arr,5);で変わる

$arr = array_flip($arr);
echo $arr[5];

結果を取得できる関数を使用する必要はありません

于 2013-09-11T07:59:49.947 に答える
0

これはおそらくうまくいくはずです:

    function returnLastMatching($haystack,$needle) {
    foreach($haystack as $key=>$element)
    {



        if($element==$needle)
        {
            $temp=$key;
        }

    }
      return $temp;
    }
于 2013-09-11T07:51:01.463 に答える