PHP多维数组比较和删除索引数组的值

时间:2017-08-27 20:52:07

标签: php

我有一个合适的预订时间阵列和另一个多维数组,其中包含每个日期已预订时间的数组。我想遍历每个日期并为每个日期构建另一个单独的多维数组,其中包含第一个可自由预订的数组中的那些时间。

$times = array("9:00", "10:00", "11:00", "12:00", "13:00");

$dates = array(
            "28/07/2018" => array("10:00", "11:00"),
            "29/07/2018" => array("10:00", "13:00"),
            "30/07/2018" => array("11:00", "13:00"));



// function to remove duplicates
function myArrayDiff($array1, $array2) {
    // loop through each item on the first array
    foreach ($array1 as $key => $row) {
        // loop through array 2 and compare
        foreach ($array2 as $key2) {
            if ($row['id'] == $key2) {
                // if we found a match unset and break out of the loop
                unset($array2[$key2]);
                break;
            }
        }
    }

    return array_values($array2);
}

$array3 = myArrayDiff($dates, $times);

print_r($array3);

2 个答案:

答案 0 :(得分:0)

提供的功能显然是从某处复制的,不能使用给定的数据。您需要做的就是每天的差异时间(迭代天数,并使用array_diff进行差异)

onError_

答案 1 :(得分:0)

我不完全确定你之后的事情,因为它并不完全清楚,所以我在这里做了一些假设。

我假设您希望获得第一个数组中首选的时间(小时)数组,并创建一个新数组,如第二个数组,匹配可用的小时数。

注意:我在这里使用较新的php数组语法,因为它比旧版php的丑陋array()语法更好。

$preferred = [
    "9:00",
    "10:00",
    "11:00",
    "12:00",
    "13:00"
];

$available = [
    "28/07/2018" => [
        "10:00",
        "11:00"
    ],
    "29/07/2018" => [
        "10:00",
        "13:00"
    ],
    "30/07/2018" => [
        "11:00",
        "13:00"
    ]
];

$dates = array_keys($available);
$ideal = [];
// create an ideal array keyed by the available dates with empty array as values for now.
// useless now, but useful later.
foreach ($dates as $date) {
    $ideal[$date] = [];
}
foreach ($available as $date => $hours) {
    foreach ($hours as $hour) {
        if (in_array($hour, $preferred) === true) {
            $ideal[$date][] = $hour;
        }
    }
}

print_r($ideal);

我确定有更有效的方法可以做到这一点,但我认为这是相当可读的。

希望有所帮助。如果我误解了你想要的东西,你能澄清一下吗?