在这里,我有两个多维数组。我想从第一个数组中查找值,如果该值是否在第二个数组中。
第一个数组:
$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
)
在这里,我没有在输出中得到第一个值。
我在哪里错了?
答案 0 :(得分:2)
问题是array_search
(doc)返回索引->在您的情况下为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()