如果未找到,则在数组中进行针搜索将返回0

时间:2012-05-30 16:57:32

标签: php arrays multidimensional-array

当找到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”来调试函数,但这也无效。

任何人都知道如何解决这个问题?

非常感谢!

2 个答案:

答案 0 :(得分:1)

当您搜索2时,您将获得0,因为您有$haystack[0][score1] = 2。您需要指定您正在寻找userid而不是其他任何内容。

foreach($haystack as $key => $value) {
  if ($value['userid'] == $needle) {
    return $key;
  }
}

答案 1 :(得分:1)

  

当我搜索2(无法找到)时,它返回0.这当然不正确......

查看提供的数组,正确。值2中显示的值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 */ }