【问题标题】:Finding a pair on a multidimensional array using a while loop使用 while 循环在多维数组上查找一对
【发布时间】:2013-09-30 10:32:43
【问题描述】:

如何找到两个数字之间的匹配项。如果roosters_A 的权重等于roosters_B 的权重。如果匹配,则两对将不再匹配,我有一个未设置的功能。

这是我的代码:

$roosters = array(
                      array('weight' => 2000),
                      array('weight' => 1810),
                      array('weight' => 1810),
                      array('weight' => 1600),
                      array('weight' => 1800),
                      array('weight' => 1915),
                      array('weight' => 1700),
                      array('weight' => 2000),
                      array('weight' => 1915),
                      array('weight' => 1800)
                      );

        if(sizeof($roosters) >= 2) {
         $i = 1;
            $match = 0;
             $roosters_A  =  $roosters[0];
             while(sizeof($roosters) > $i and $match == 0) {
                 $roosters_B  =  $roosters[$i];
                 if($roosters_A['weight'] == $roosters_B['weight']) {
                    echo "$i. With Pair ".$roosters_A['weight'].' '.$roosters_B['weight'].'<br>';
                    $match = 1;
                 }  else {
                    echo "$i. No Pair ".$roosters_A['weight'].' '.$roosters_B['weight'].'<br>';
                    $match = 0;
                 }
                 $i++;  

                 unset($roosters_B);
             } 

            if($match == 1) { 
                unset($roosters_A);
            }

        }

我想这样显示:

1. With Pair 2000 2000
2. With Pair 1810 1810
3. No Pair 1600 
4. With Pair 1800 1800
5. With Pair 1915 1915
5. No Pair 1700 
6. With Pair 2000 2000
7. With Pair 1915 1915
8. With Pair 1800 1800

你能帮帮我吗?我很难找到一种方法来匹配它而不重复并且不使用任何数据库来显示此记录。非常感谢那些帮助我的人。我想这对你来说很容易。

【问题讨论】:

    标签: php arrays multidimensional-array match


    【解决方案1】:

    [更新为也可以处理 3 对或更多对]

    你可以这样做:

    $roosters = array(
      array('weight' => 2000),
      array('weight' => 1810),
      array('weight' => 1810),
      array('weight' => 1600),
      array('weight' => 1800),
      array('weight' => 1915),
      array('weight' => 1700),
      array('weight' => 2000),
      array('weight' => 1915),
      array('weight' => 1800),
      //added
      array('weight' => 1800),
      array('weight' => 1700),
      array('weight' => 2000),
      array('weight' => 1917),
      array('weight' => 1800)
    );
    
    $result=array();
    foreach ($roosters as $rooster) {
        $key=$rooster['weight'];
        if (isset($result[$key])) {
            $result[$key]=$result[$key]+1;
        } else {
            $result[$key]=1;
        }
    }
    
    foreach ($result as $key=>$value) {
        switch ($value) {
            case 1 : echo 'No Pair'; break;
            case 2 : echo 'With Pair'; break;
            case 3 : echo 'Three Pairs'; break;
            default : echo 'Multiple Pairs'; break;
        }
        for ($i=0;$i<$value;$i++) {
            echo '&nbsp;'.$key;
            if ($i==1) break; //break if more than two
        }
        echo '<br>';
    }
    

    输出

    Three Pairs 2000 2000
    With Pair 1810 1810
    No Pair 1600
    Multiple Pairs 1800 1800
    With Pair 1915 1915
    With Pair 1700 1700
    No Pair 1917
    

    上面构建了一个$result-array,它拥有唯一的weights,以及$rooster中存在多少weights。最后输出结果,通知每个weight是否有一个或多个。

    【讨论】:

    • 感谢@davidkonrad 的帮助。三双怎么样?以对 2000 2000 2000 为例,我怎样才能删除额外的 2000?
    • @Edmar,如您所见(或尝试),该算法不会准确地寻找两对,或者只回显两对。已更新答案 - 我更改的是“无对”、“有对”ternaryswitch,包括“三对”和“多对”。根据您的需要扩展/修改switch。并包括一个休息,所以它不会重复说 2000 两次以上。
    • 嗨@davidkonrad。感谢这个伟大的答案你是个天才。抱歉问了太多问题。另一件事,我如何追踪比赛是否已经配对?例如,三对 2000、2000 和 2000 已经配对,而另一对 2000 没有配对,这可能吗?感谢您的帮助。
    【解决方案2】:

    重新发明轮子是个好主意。祝你好运!

    但是,有时甚至 PHP 也有一些可用的功能,您可能会使用。

    在您的情况下,例如这两个

    assuming comparing array $roosters_A vs. $roosters_B
    and $roosters_A/B is prepared like $roosters_A/B = (array) $roosters['weight'];
    

    )

    -

    [1] 得到“无对”(=唯一)

    http://www.php.net/manual/en/function.array-diff.php

    $no_pairs_array = array_diff($roosters_A, $roosters_B);
    

    -

    [2] 得到“成对”

    http://www.php.net/manual/en/function.array-intersect.php

    $pairs_array = array_intersect($roosters_A, $roosters_B);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-13
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多