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);您正在该嵌套数组的“第一层”上搜索键,当然,它们只是01作为键

你可以做这样的事情

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 整个数组。一种方法是:

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 回答