【问题标题】:How to compare two arrays using a for loop?如何使用 for 循环比较两个数组?
【发布时间】:2015-08-25 08:42:54
【问题描述】:

我有 2 个来自数据库的爆炸数组。这就是我所做的。

    $searches = explode(',', $searchengine);
    $icons = explode(',', $icon);
    $b = count($searches);
    $c = count($icons);

我还制作了一个数组来比较每个爆炸数组。

$searchesa = array("google","yahoo","bing");
    $d = count($searchesa);
    $iconsa = array("facebook","twitter","googleplus","linkedin","pinterest","delicious","stumbleupon","diigo");
    $y = count($iconsa);

然后我使用 for 循环前往不同的数组索引。但是结果是错误的,有时我有一个错误,上面写着 UNDEFINED OFFSET。

for ($a=0; $a <$d ; $a++) {
    if ($searches[$a] == $searchesa[$a]) 
            {echo '<br>'.$searchesa[$a].': check ';
        }else
        echo '<br>'.$searchesa[$a].': chok ';
    }

for ($x=0; $x <$y ; $x++) {
    if ($icons[$x] == $iconsa[$x]) 
        echo '<br>'.$iconsa[$x].': check ';
    else
        echo '<br>'.$iconsa[$x].': chok ';
}

如果数据库中的索引和我创建的数组相同,则状态检查,否则状态阻塞。

【问题讨论】:

  • 未定义的偏移量?那么可能两个数组的长度不同。 c:
  • 你不是在寻找类似的东西:foreach ($array_a as $index_a =&gt; $value_a) foreach( $array_b as $index_b =&gt; $value_b) if ($value_a === $value_b) ...
  • 是的,它的长度并不相同。实际上,数据库中的爆炸数组是复选框中的值。我现在正在尝试检查选择了哪些复选框,因为输出将是复选框,其中包含选中按钮的复选框和未选中的复选框@Xyv
  • 结合使用foreachin_arrayarray_key_exists不是更好吗?
  • 你能告诉我怎么做吗?我真的不知道@Peter

标签: php arrays for-loop


【解决方案1】:
$arraysAreEqual = ($a == $b); // TRUE if $a and $b have the same key/value pairs. 
$arraysAreEqual = ($a === $b); // TRUE if $a and $b have the same key/value pairs in the same order and of the same types.

通过: PHP - Check if two arrays are equal

【讨论】:

  • 这个建议不错,但是op不是分别比较每个值的意思吗?
  • @Xyv 它做同样的事情.. 为什么要通过迭代进行比较?我同意,如果我们必须基于匹配执行某种业务逻辑,比较会很有用。
  • 哦,我不是要批评,毕竟它是一个互相帮助的板。但是......我不确定他们的原因是什么,但毕竟这是他们的问题。所以谁知道他们想对以后基础的值做什么。
【解决方案2】:

我在评论中发布了这个,但我认为大纲在答案中会更好。

我希望这能有所帮助:

<?php
$array_a = ['test','test2']; // assume this is your first array
$array_b = ['test']; // assume this is the array you wan to compare against
$found = false;

foreach ($array_a as $key_a => $val_a) {
    $found = false;
    foreach ($array_b as $key_b => $val_b) {
       if ($val_a == $val_b) {
            echo '<br>'. $val_b .': check ';     
            $found = true;
        }     
    }
    if (!$found)
        echo '<br>'. $val_a .': chok ';
}
?>

编辑:请原谅我没有测试它。

这个东西会遍历第一个数组,并将它与另一个数组中的每个值进行比较。

提示:您可以轻松地将其放入函数中并像compare($arr1, $arr2)一样调用它

【讨论】:

  • 不客气^^我看到Touqeer Shafi也发布了一个很好的答案,也许你可以结合这两个建议。或者只坚持一个:p
【解决方案3】:

你可以试试in_array方法:

$searchesa = array("google","yahoo","bing");
$iconsa = array("facebook","twitter","googleplus","linkedin","pinterest","delicious","stumbleupon","diigo",'google');

foreach($searchesa as $val){
    if(in_array($val, $iconsa)){
       echo "check";
    } else {
       echo "choke";
    }
}

注意:我在 $iconsa 数组中添加了“google”。

【讨论】:

    【解决方案4】:

    如果我对您的理解正确,这就是您要查找的内容:

    // Lets prepare the arrays
    $searchEngines = explode(',', $searchengine);
    $icons = explode(',', $icon);
    
    // Now let's define the arrays to match with
    $searchEnginesCompare = array(
        'google',
        'yahoo',
        'bing'
    );
    
    $iconsCompare = array(
        'facebook',
        'twitter',
        'googleplus',
        'linkedin',
        'pinterest',
        'delicious',
        'stumbleupon',
        'diigo'
    );
    
    // Check the search engines
    foreach ($searchEngines as $k => $searchEngine) {
        if (in_array($searchEngine, $searchEnginesCompare)) {
            echo $searchEngine." : check<br />";
        } else {
            echo $searchEngine." : failed<br />";
        }
    }
    
    // Now let's check the icons array
    foreach ($icons as $k => $icon) {
        if (in_array($icon, $iconsCompare)) {
            echo $icon." : check<br />";
        } else {
            echo $icon." : failed<br />";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 2021-10-10
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多