首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用while循环在多维数组上查找对

使用while循环在多维数组上查找对
EN

Stack Overflow用户
提问于 2013-09-30 18:32:43
回答 1查看 620关注 0票数 -1

我怎样才能找到两个数字之间的匹配。如果roosters_A的权重等于roosters_B的权重。如果匹配,这两个配对将不会再次匹配,我有一个取消设置函数。

下面是我的代码:

代码语言:javascript
复制
$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);
            }

        }

我想这样显示:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-30 18:42:20

更新为还可处理3对或更多对

您可以这样做:

代码语言:javascript
复制
$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>';
}

输出

代码语言:javascript
复制
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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19091973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档