首页 > 解决方案 > 如何比较不同定义键中相同值的多维数组

问题描述

我找不到以下任务的任何解决方案 - 请帮助:如果 DTEND==DTSTART 其中SUMMARY-NAME相同(相似),我想获得多维数组的以下结果:

大批 (

[0] => Array
    (

        [DTEND] => Array

            (

                [value] => 20180219
                [type] => DATE

            )

        [DTSTART] => Array
            (
                [value] => 20190220
                [type] => DATE
            )

        [SUMMARY] => James Brown (AB123)
    )
[1] => Array
    (
        [DTEND] => Array
            (
                [value] => 20180708
                [type] => DATE
            )

        [DTSTART] => Array
            (
                [value] => 20180704
                [type] => DATE
            )

        [SUMMARY] => Johnny Cash (xy987)
    )
[2] => Array
    (
        [DTEND] => Array
            (
                [value] => 20180225
                [type] => DATE
            )

        [DTSTART] => Array
            (
                [value] => 20180219
                [type] => DATE
            )

        [SUMMARY] => Bob Marley (DE456)
    )
[3] => Array
    (
        [DTEND] => Array
            (
                [value] => 20181230
                [type] => DATE
            )

        [DTSTART] => Array
            (
                [value] => 20181229
                [type] => DATE
            )

        [SUMMARY] => Elvis Presley (FG789)
    )

[4] => Array
    (
        [DTEND] => Array
            (
                [value] => 20190112
                [type] => DATE
            )

        [DTSTART] => Array
            (
                [value] => 20181230
                [type] => DATE
            )

        [SUMMARY] => Elvis Presley
    )

)

  1. 匹配:结束:[0][DTEND][value] = 20180219 - [SUMMARY] = James Brown (AB123) - 不同,不能加入

开始:[2][DTSTART][value] = 20180219 - [SUMMARY] => Bob Marley (DE456) - 不同,不能加入

  1. 比赛:结束:[3][DTEND][value] = 20181230 - [SUMMARY] = Elvis Presley (FG789) - 相同,可以加入

开始:[4][DTSTART][value] = 20181230 - [SUMMARY] => Elvis Presley - 相同,可以加入

标签: php

解决方案


根据您的示例,这应该可以。

$matches = [];
$count = count($arr);
for ($i = 0; $i < $count; $i++) {
    for ($x = $i + 1; $x < $count; $x++) {

        // finds " (any uppercase letters or numbers)"
        $pattern = '/ \([A-Z0-9]+\)/';

        /// remove the numbers within parenthesis and compare summary values
        if (preg_replace($pattern, '', $arr[$i]['SUMMARY']) == preg_replace($pattern, '', $arr[$x]['SUMMARY'])) {

            if ($arr[$i]['DTEND'] === $arr[$x]['DTSTART'] || $arr[$x]['DTEND'] === $arr[$i]['DTSTART']) {
                $matches [] = [$arr[$i], $arr[$x]];
            }
        }

    }
}

var_dump($matches);

推荐阅读