0

私は次の配列を持っています($ arrayres)(サンプルデータ)

Array
(
[0] => Array
        (
            [description] => somedata
            [amount] => 52,6
            [b_id] => Array
                (
                    [0] => 138950106
                    [1] => 138950106
                )

        )

    [1] => Array
        (
            [description] => somedata 
            [amount] => 4,9
            [b_id] => Array
                (
                    [0] => 138911857
                    [1] => 138911857
                )

        )
)

次に、結果にb_idを返すクエリがあります。どのb_idが配列に含まれているか、および配列内のそれぞれの位置を見つける必要があります。だから私はarray_rearchを実行します

while ($dbres = $res->fetchRow(MDB2_FETCHMODE_ASSOC))
{

    $key = array_search($dbres['b_id'], $arrayres);
    if ($key)
    {
        $keys[] = $key;
    }

}

しかし、一致するものはないようです。print_r($ keys)は常に空ですが、問題のb_idを含む結果があります。

私は何が間違っているのですか?

4

3 に答える 3

2

array_search($dbres['b_id'], $arrayres);そうするとき、そのネストされた配列の「最初のレイヤー」でキーを検索しています。もちろん、キーとしてのみ0または1キーとして存在します

あなたはそのようなことをすることができます

for($i=0;$i<count($arrayres);$i++) {
    array_search($dbres['b_id'], $arrayres[$i]['b_id']);
    if ($key)
    {
     $keys[] = $key; /* just follow your logic */
    }
}

それをwhileループに挿入する必要があります

于 2012-05-15T12:24:02.310 に答える
1

検索している配列に、検索しているb_idが含まれていません。その入札を含む配列が含まれています。

したがって、所有しているデータの配列をループするか、可能であれば配列全体をarray_searchで指定する必要があります。1つの方法はこれです:

function has_bid($arrayres, $bid) {
    foreach ($arrayres as $k => $v) {
            // This is assuming $bid is an array with 2 integers.
            if ($v['bid'] == $bid) {
                return $k;
            }
            // And this is assuming $bid is one of the integers.
            /*
               Here, array_search will search for the integer in an array that contains
               the values you are searching for in the first level,
               not inside an array that is inside another one.
               You can think of it as array_search searching the first level of it.
            */
            if (array_search($bid, $v) !== false) {
                return $k;
            }
    }
    return false;
}

そして、あなたはこの関数を次のように使用します:

$key = has_bid($arrayres, $dbres['bid']);
if ($key !== false) {
     // do something...
}
于 2012-05-15T12:26:53.163 に答える
-1

これを試して...

if($key !== false){
     $keys[] = $key;
}
于 2012-05-15T12:24:35.287 に答える