在 2 个数组中搜索
Posted
技术标签:
【中文标题】在 2 个数组中搜索【英文标题】:Search in 2 arrays 【发布时间】:2014-05-18 21:15:20 【问题描述】:我在数组中搜索时遇到问题,在 2 个数组中,第一个数组有一个固定结构,第二个数组从 url 发送变量,并且可以有一些值为空的值,例如
第一个阵列:
结构是这样的:
id 值、cat 值、subcat 值和国家值
$ar_val="134567,dogs,food,EEUU";
从 URL 获取的第二个变量
$ar_url="134567,dogs,toys,EEUU";
正如您在第二个 var 中看到的,$ar_url i 有一个与 $ar_val 的第一个结构不同的值在这种情况下是玩具
我想比较 $ar_val 的固定结构,如果从 $ar_val 以相同的顺序具有相同的值,则获取 true 或 false
我试试这个:
$ar_val="134567,dogs,food,EEUU";
$ar_url="134567,dogs,toys,EEUU";
$exp_ar_val=explode(",",$ar_val);
$exp_ar_url=explode(",",$ar_url);
foreach ($exp_ar_val as $exp_ar_val2)
$ar_val_end[]=$exp_ar_val2;
foreach ($exp_ar_url as $exp_ar_url2)
$ar_val_end2[]=$exp_ar_url2;
$end_results=array_intersect($ar_val_end,$ar_val_end2);
有了这个我想知道例如:如果我按 id 搜索,例如 cat ,在 2 个数组中得到肯定的结果,我有相同的数据,但如果搜索 subcat 我不能得到结果,因为一个不同有食物,其他有玩具,但使用 array_intersect 时没有比较
谢谢,问候
【问题讨论】:
你最终找到答案了吗? 【参考方案1】:我想他想检查一个值是否存在于任一数组中。试试这个...
<?
function inarray($value,$array=array())
if(in_array($value,$array))
return true;
else
return false;
$ar_val=array("134567","dogs","food","EEUU");
$ar_url=array("134567","dogs","toys","EEUU");
$a = inarray("food",$ar_val);
$b = inarray("food",$ar_url);
if($a!=false and $b!=false)
echo "Found in both arrays";
elseif($a==true and $b==false)
echo "Found in first array";
elseif($a==false and $b==true)
echo "Found in second array";
else
echo "Not Found in any array";
?>
【讨论】:
【参考方案2】:试试这个:
$ar_val="134567,dogs,food,EEUU";
$ar_url="134567,dogs,toys,EEUU";
$arrayVal = explode(',', $ar_val);
$arrayUrl = explode(',', $ar_url);
$maxLength = max(sizeof($arrayVal), sizeof($arrayUrl));
$arrayIdsEqual = array();
$arrayIdsDifferent = array();
for ($i = 0; $i < $maxLength; $i++)
if (isset($arrayVal[$i]) && isset($arrayUrl[$i]))
if ($arrayVal[$i] == $arrayUrl[$i])
$arrayIdsEqual[] = $i;
else
$arrayIdsDifferent[] = $i;
else
//you arrive here if you have 2 arrays that don't have the same size / sme number of variables
//assuming your 2 arrays ALWAYS have the same size, you can use the following logic
if (empty($arrayIdsDifferent))
echo '2 arrays are the same';
else
echo "Differences: \n";
foreach ($arrayIdsDifferent as $indexDifferent => $currentIdDifferent)
$output = 'difference ' . ($indexDifferent + 1) . ': ';
$output .= 'val = ' . $arrayVal[$currentIdDifferent];
$output .= '; ';
$output .= 'url = ' . $arrayUrl[$currentIdDifferent];
echo $output;
echo "\n";
你可以在这里看到这个工作:http://3v4l.org/pTQns
【讨论】:
【参考方案3】:您可以为此使用array_diff
,这非常适合用于比较目的:
<?php
$ar_val= array ("0" => "134567", "1" => "dogs", "2" => "food", "3" => "EEUU");
$ar_url= array ("0" => "134567", "1" => "dogs", "2" => "EEUU", "3" => "food");
$result = array_diff($ar_val, $ar_url);
$num = 0;
if ($result != NULL)
echo "unique array keys: TRUE" . "\n\n";
print_r($result);
echo "\n\n";
else
echo "unique array keys: FALSE" . "\n\n";
foreach($ar_val as $key)
if ($ar_val[$num] != $ar_url[$num])
echo "intersecting array key different: TRUE" . "\n> ";
print_r($ar_val[$num]);
echo "\n\n";
$num++;
?>
【讨论】:
【参考方案4】:只需将它们与相等进行比较,无需任何复杂的操作。
$ar_val = "134567,dogs,food,EEUU";
$ar_url = "134567,dogs,toys,EEUU";
$exp_ar_val = explode(",", $ar_val);
$exp_ar_url = explode(",", $ar_url);
var_dump($exp_ar_val == $exp_ar_url); // false, elements does not match
$exp_ar_url = $exp_ar_val;
var_dump($exp_ar_val == $exp_ar_url); // true, all elements match
shuffle($exp_ar_url);
var_dump($exp_ar_val == $exp_ar_url); // false, different order
【讨论】:
以上是关于在 2 个数组中搜索的主要内容,如果未能解决你的问题,请参考以下文章