Php 使用“数组搜索”时未获取第一个值

Php 使用“数组搜索”时未获取第一个值,php,arrays,Php,Arrays,这里,我有两个多维数组。因为我想从第一个数组中找到值,如果值在第二个数组中存在或不存在 第一个阵列: $abc = array( array("fld_channel_selected_item_track_id" => 627905217), array("fld_channel_selected_item_track_id" => 616557954) ); $a = array_column($abc, 'fld_channel_selected_item_t

这里,我有两个多维数组。因为我想从第一个数组中找到值,如果值在第二个数组中存在或不存在

第一个阵列:

$abc = array(
    array("fld_channel_selected_item_track_id" => 627905217),
    array("fld_channel_selected_item_track_id" => 616557954)
);
$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; 
第二个阵列:

$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;
结果是:

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

我错在哪里?

问题是数组搜索返回索引->在您的案例中是索引0,因此如果$pos失败

如果在数组中找到针,则返回针的键,否则返回FALSE

需要将结果与FALSE进行比较

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

if ($pos) {
   // $pos = 0 is falsy
}
问题是数组搜索返回索引->在您的案例中是索引0,因此如果$pos失败

如果在数组中找到针,则返回针的键,否则返回FALSE

需要将结果与FALSE进行比较

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

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

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

如果在数组中找到针,则返回针的键,否则返回FALSE

警告 此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。有关更多信息,请阅读布尔值部分。使用===运算符测试此函数的返回值

对于第一个值,实际上找到了它,但结果是0

if ($pos !== FALSE) {
    // code here
}
所以它将无法通过if…else检查

for($i = 0;$i < count($abc); $i++)
{ 
    $pos = in_array($abc[$i]["fld_channel_selected_item_track_id"], array_column($pqr, 'fld_channel_item_track'));
    if($pos) 
    {   
        echo "<pre>";print_r($pqr[$i]); // see the index I changed here
    }
}
您需要执行更明确的比较


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

如果在数组中找到针,则返回针的键,否则返回FALSE

警告 此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。有关更多信息,请阅读布尔值部分。使用===运算符测试此函数的返回值

对于第一个值,实际上找到了它,但结果是0

if ($pos !== FALSE) {
    // code here
}
所以它将无法通过if…else检查

for($i = 0;$i < count($abc); $i++)
{ 
    $pos = in_array($abc[$i]["fld_channel_selected_item_track_id"], array_column($pqr, 'fld_channel_item_track'));
    if($pos) 
    {   
        echo "<pre>";print_r($pqr[$i]); // see the index I changed here
    }
}
您需要执行更明确的比较

正如其他答案所指出的

我们知道array_search返回索引值,所以第一个循环返回0,第二个循环返回1,所以如果$pos为0,则失败。但您可以使用in_数组修改现有代码,以实现所需的功能。让我们试试下面的方法-

演示:

正如其他答案所指出的

我们知道array_search返回索引值,所以第一个循环返回0,第二个循环返回1,所以如果$pos为0,则失败。但您可以使用in_数组修改现有代码,以实现所需的功能。让我们试试下面的方法-

演示:

因为如果$pos为0,则认为是错误的。因为如果$pos为0,则认为是错误的。