使用“ array_search”时未获得第一个值

时间:2019-05-31 09:15:06

标签: php arrays

在这里,我有两个多维数组。我想从第一个数组中查找值,如果该值是否在第二个数组中。

第一个数组:

$abc = array(
    array("fld_channel_selected_item_track_id" => 627905217),
    array("fld_channel_selected_item_track_id" => 616557954)
);

第二个数组:

$pqr = array(
    array(
        "fld_channel_item_track" => 627905217,
        "fld_channel_item_title" => "Tropical Fantasy"
    ),
    array(
        "fld_channel_item_track" => 616557954,
        "fld_channel_item_title" => "Bday Boys"
    )
);

因此,我正在搜索第一个数组值是否在第二个数组值中:

for($i = 0;$i < count($abc); $i++)
{   
    $pos = array_search($abc[$i]["fld_channel_selected_item_track_id"], array_column($pqr, 'fld_channel_item_track'));
    if($pos) 
    {   
        echo "<pre>";print_r($pqr[$pos]);
    }
}
exit;

Outout是:

<pre>Array
(
    [fld_channel_item_track] => 616557954
    [fld_channel_item_title] => Bday Boys
)

在这里,我没有在输出中得到第一个值。

我在哪里错了?

3 个答案:

答案 0 :(得分:2)

问题是array_searchdoc)返回索引->在您的情况下为0,因此if ($pos)失败...

  

如果在阵列中找到了针,则返回针,否则返回FALSE。

需要将结果与FALSE进行比较

顺便说一句,这将是实现您所需的更好的方法:

$a = array_column($abc, 'fld_channel_selected_item_track_id');
$b = array_column($pqr, "fld_channel_item_title", "fld_channel_item_track");
foreach($a as $searchId)
    if (isset($b[$searchId])) echo $b[$searchId] . PHP_EOL; 

答案 1 :(得分:2)

array_search()返回找到的位置,否则返回FALSE

https://www.php.net/manual/en/function.array-search.php

  

如果在阵列中找到了针,则返回针,否则返回FALSE。

     

警告   此函数可以返回布尔FALSE,但也可以返回非布尔值,其值为FALSE。请阅读布尔值部分以获取更多信息。使用===运算符测试此函数的返回值。

实际上找到了第一个值,但结果为0

$pos = 0

因此,如果...否则其他检查将失败

if ($pos) {
   // $pos = 0 is falsy
}

您需要进行更明确的比较

if ($pos !== FALSE) {
    // code here
}

答案 2 :(得分:0)

其他答案已经指出

我们知道array_search()返回index的值,因此对于第一个循环,它返回 0 ,对于第二个循环,它返回 1 ,因此当{{1} } 0 失败。但是您可以使用if($pos)修改现有代码以实现所需的功能。让我们尝试如下-

in_array()

演示: https://3v4l.org/HA9tA