PHP-如何根据条件配对数组中的项目

前端之家收集整理的这篇文章主要介绍了PHP-如何根据条件配对数组中的项目前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何配对数组中的项目?
假设我有一系列战士.我想根据他们的权重配对它们.最接近重量的战士应配对为最佳匹配.但如果他们在同一个团队中,他们就不应该配对.

> ** —第1队 – **
>战士A重量是60
>战斗机B重量是65
> ** – 第2队 – **
>战斗机C重量是62
>战斗机D重量是60
> ** – 第3队 – **
>战斗机E重量是64
>战斗机F重量是66

输出

>战斗机VS战斗机D.
>战斗机B VS战斗机F.
>战斗机C VS战斗机E.

我一直在研究这个主题,发现类似但不完全的东西:
Random But Unique Pairings,with Conditions

真的很感激一些帮助.提前致谢!

我很喜欢你的问题,所以我做了一个完整的强大版本.
<?PHP

    header("Content-type: text/plain");
    error_reporting(E_ALL);

    /**
     * @class            Fighter
     * @property $name   string
     * @property $weight int
     * @property $team   string
     * @property $paired Fighter  Will hold the pointer to the matched Fighter
     */
    class Fighter {
        public $name;
        public $weight;
        public $team;
        public $paired = null;

        public function __construct($name,$weight,$team) {
            $this->name   = $name;
            $this->weight = $weight;
            $this->team   = $team;
        }
    }

    /**
     * @function sortFighters()
     *
     * @param $a Fighter
     * @param $b Fighter
     *
     * @return int
     */
    function sortFighters(Fighter $a,Fighter $b) {
        return $a->weight - $b->weight;
    }

    $fighterList = array(
        new Fighter("A",60,"A"),new Fighter("B",65,new Fighter("C",62,"B"),new Fighter("D",new Fighter("E",64,"C"),new Fighter("F",66,"C")
    );
    usort($fighterList,"sortFighters");

    foreach ($fighterList as $fighterOne) {
        if ($fighterOne->paired != null) {
            continue;
        }
        echo "Fighter $fighterOne->name vs ";
        foreach ($fighterList as $fighterTwo) {
            if ($fighterOne->team != $fighterTwo->team && $fighterTwo->paired == null) {
                echo $fighterTwo->name . PHP_EOL;
                $fighterOne->paired = $fighterTwo;
                $fighterTwo->paired = $fighterOne;
                break;
            }
        }

    }

>首先,战斗机被保留在课堂上,这样可以更容易地为他们分配属性(如果你自己没有这样做,我恳请你这样做!)
>制作一系列战士,并为他们分配名称,重量和团队.
>按重量对数组进行排序(使用usort()和排序函数sortFighters()按每个元素的weight属性排序.
>迭代数组并匹配基于:

>战斗机之一尚未匹配
>战斗机2与战斗机不在同一个团队中
>战斗机2尚未匹配

>当找到匹配时,将每个匹配战士的对象指针相互存储(因此它不再为空,加上你可以通过转到$fighterVariable->配对来访问每个战士的对)>最后,打印结果.

猜你在找的PHP相关文章