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,则认为是错误的。