【问题标题】:php array arrangementsphp数组排列
【发布时间】:2013-02-19 02:54:45
【问题描述】:

您好,我使用以下函数将字符串逗号分隔的 0 1 5、2 3 15、4 18 20 集合转换为数组:

$openHrs = explode(",", $openHrs['open_hours']);

最终结果如下:

Array ( [0] => 0 1 5 [1] => 2 3 15 [2] => 4 18 20 )

在这个数组中0 1 5 表示Mon 1 am 5 am4 18 20 表示Thur 6 pm 8 pm,所以第一个数字代表工作日休息,2 个数字代表 24 小时格式的小时,现在我如何将现有数组输出为这种格式?

Array ( [0] => Mon 1 am 5 am [1] => Tue 3 am 3 pm [2] => Thur 6 pm 8 pm )

谢谢

【问题讨论】:

  • 不多,我不确定是否需要将数组分解为子数组并将每个结果分配到工作日和时间。
  • 如果它确实回答了您的问题,请考虑接受一个答案(点击左侧的勾号)

标签: php arrays algorithm


【解决方案1】:

我会使用 array_map 来获得过滤后的版本。您可以使用 mktime() 创建日期并使用 date() 对其进行格式化。我相信这应该是解决方案:

$filtered = array_map(function($incoming) {
    $parts = explode(' ', $incoming);
return
    date('D', mktime(0,0,0,1, $parts[0])) . ' ' .
    date('g a', mktime($parts[1])) . ' ' .
    date('g a', mktime($parts[2]));
}, $openHrs);

【讨论】:

  • 我用您发布的数据对其进行了测试,并且效果很好。 :( 你能指定你得到的输出让你相信它不能正常工作吗?也许我可以修复它。
  • $incoming 代表什么? $openHrs 结果如下数组( [0] => 0 1 5 [1] => 2 3 15 [2] => 4 18 20 )。我应该用 $openHrs 替换 $incoming 吗?
  • 糟糕 - 我将编辑我的代码 - 变量 $array 应该是 $openHrs - 这是传入变量。所以基本上该函数将 $incoming 从 $openHrs 转换 - 然后施展魔法。在我的上一个示例中,我偶然创建了一个名为 $array 的临时变量 - 而不是复制您的代码 :)
【解决方案2】:

对于工作日,我建议:

$weekday=array('Mon','Tue','Wed','Thu','Fri','Sat','Sun');    

foreach ($openHours As &$openHour) {
    $foo = explode(' ',$openHour);
    $openHour=$weekday[$foo].' '. // <-- write yourself a nice function to convert 24h to 12h, maybe there's something like this in PHP already?       
}

【讨论】:

    【解决方案3】:

    试试这个:

    // This will be used for the week days
    $weekdays = array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
    
    // Loop through each date
    foreach($openHrs as &$temp) {
        // Separate the numbers
        $temp = explode(" ", $temp);
    
        // Change from a 24 hrs clock to a 12 hrs clock
        $temp[1] = $temp[1] > 12 ? $temp[1] - 12 . 'pm' : $temp[1] . 'am';
        $temp[2] = $temp[2] > 12 ? $temp[2] - 12 . 'pm' : $temp[2] . 'am';
    
        // Update the element
        $temp = $weekdays[$temp[0]] . ' ' . $temp[1] . ' ' . $temp[2];
    }
    

    【讨论】:

    • @zlippr 哎呀...我错过了&amp; 符号。已修复,立即尝试
    • nope..return nothing $openHrs 结果如下数组 ( [0] => 0 1 5 [1] => 2 3 15 [2] => 4 18 20 ) 当使用 foreach 时什么都不返回..
    • @zlippr 它对我来说很好用,你有没有在你自己的代码中改变过什么?
    【解决方案4】:

    我会用空格作为分隔符再次分解每个 Arrayelement,这样你就有了更好的数组结构:

    Array ( [0] => Array(0, 1, 5), [1] => Array(1, 3, 3) [2] => Array(4, 18, 18) )
    

    如果您有这种结构,可能有几种方法。可能有一个带有 date() 和时间戳的解决方案,但老实说,我不确定这一点。另一个解决方案是。用 Weekdays 定义另一个数组。

    $weekdays = array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
    

    然后您可以使用您拥有的数字作为该数组的索引来输出正确的工作日。 用一点自制函数ala可以输出小时数:

    function twentyFourHourToAmPM($number) {
        if ($number > 12) {
             return ($number - 12)." pm";
        } else {
             return $number." am";
        }
     }
    

    然后输出一切应该像这样工作:

    foreach ($openHrs as $key => $value) {
        echo $weekdays[$value[0]]." ".twentyFourHourToAmPM($value[1])." - ".twentyFourHourToAmPM($value[2]);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多