【问题标题】:Search in 2 arrays在 2 个数组中搜索
【发布时间】: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 时没有比较

谢谢,问候

【问题讨论】:

  • 你最终找到答案了吗?

标签: php arrays array-difference 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
        

        【讨论】:

          猜你喜欢
          • 2014-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-19
          • 2018-08-14
          • 2011-05-06
          相关资源
          最近更新 更多