0

userid の値が見つかったときに、この関数を使用して (最高の) 配列キーを検索しています。

function array_search_value($needle,$haystack) {
foreach($haystack as $key => $value) {
    if(in_array($needle, $value)) return $key;
}
  }

私の配列は次のようになります (単純なクエリによって生成されます)。

Array
(
[0] => Array
    (
        [0] => 1
        [userid] => 1
        [1] => 2
        [score1] => 2
        [2] => 0
        [score2] => 0
    )

[1] => Array
    (
        [0] => 3
        [userid] => 3
        [1] => 2
        [score1] => 2
        [2] => 2
        [score2] => 2
    )

[2] => Array
    (
        [0] => 4
        [userid] => 4
        [1] => 1
        [score1] => 1
        [2] => 1
        [score2] => 1
    )

[3] => 
)

このコード:

echo array_search_value(4, $r)

正しい 2 を返します。

1 を検索すると 0 が返されます。これは正しいです。

ただし、2 (見つからない) を検索すると、0 が返されます。もちろん、これは正しくありません...私がやりたいことは、0 ではなく、何も返さないことです。私は試しました「== true」を追加して関数を微調整しますが、それも機能しません。

これを修正する方法を知っている人はいますか?

どうもありがとう!

4

2 に答える 2

1

を検索すると、 があるので2取得され0ます$haystack[0][score1] = 2。探しているものであり、それ以外のuseridものではないことを指定する必要があります。

foreach($haystack as $key => $value) {
  if ($value['userid'] == $needle) {
    return $key;
  }
}
于 2012-05-30T17:06:38.060 に答える
1

2 (見つからない) を検索すると、0 が返されます。もちろん、これは正しくありません...

提供された配列を見ると、正しいです。値2は key に表示されます0:

[0] => Array
    (
        [0] => 1
        [userid] => 1
        [1] => 2 // here
        [score1] => 2 // and here
        [2] => 0
        [score2] => 0
    )

キーだけを見たい場合はuserid、を使用するだけではなく、次のin_array()ようにする必要があります。

<?php
function array_search_value($needle,$haystack) {
foreach($haystack as $key => $value) {
    if($value['userid'] === $needle) return $key;
}
return null; // not found
  }

if (array_search_value(2, $r) === null) { /* doesn't happen */ }
于 2012-05-30T17:12:35.893 に答える