【问题标题】:PHP multidimensional array compare and remove values against indexed arrayPHP多维数组根据索引数组比较和删除值
【发布时间】:2017-08-27 20:52:07
【问题描述】:

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

$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);

【问题讨论】:

  • 您遇到的具体问题是什么并且需要帮助?从你的问题看不清楚。
  • 当你有一个缩进的代码块时,不需要用反引号括起来 (`)。事实上,反引号包含在你的代码块中,很容易搞乱语法高亮。

标签: php


【解决方案1】:

提供的函数显然是从某个地方复制而来的,并且不适用于给定的数据。您需要做的就是每天的 diff 时间(迭代天,并使用 array_diff 进行 diff)

$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"));

$filtered = [];
foreach($dates as $day => $taken_times) {
  $filtered[$day] = array_values(array_diff($times, $taken_times));
}

print_r($filtered);

【讨论】:

    【解决方案2】:

    我不完全确定你在追求什么,因为它并不完全清楚,所以我在这里做了一些假设。

    我假设您想要获取第一个数组中首选的时间数组(小时),并创建一个与第二个类似的新数组,匹配可用的小时数。

    注意:我在这里使用较新的 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);
    

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

    希望对您有所帮助。如果我误解了你想要什么,你能澄清一下吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 2012-10-25
      相关资源
      最近更新 更多