Php 按列值的前导字符对数据行进行分组

Php 按列值的前导字符对数据行进行分组,php,arrays,multidimensional-array,substring,grouping,Php,Arrays,Multidimensional Array,Substring,Grouping,我有一个如下所示的数组,我想做的是根据timestamp列的日期子字符串创建多个子数组,比如(2011-02-04): 上面的数组在每个子数组中都有一个时间戳密钥。我分解了时间戳值以将日期与时间分开,现在我无法将数组拆分为子数组 我想要的是一个数组用于2011-02-04(包含该日期的所有值),另一个数组用于2011-02-05(包含该日期的所有值)。这可以是动态的,我的意思是,日期可以是更多的。那么,我该怎么做呢 我希望它是: array[0] => array(... list of

我有一个如下所示的数组,我想做的是根据
timestamp
列的日期子字符串创建多个子数组,比如(
2011-02-04
):

上面的数组在每个子数组中都有一个时间戳密钥。我分解了时间戳值以将日期与时间分开,现在我无法将数组拆分为子数组

我想要的是一个数组用于
2011-02-04
(包含该日期的所有值),另一个数组用于
2011-02-05
(包含该日期的所有值)。这可以是动态的,我的意思是,日期可以是更多的。那么,我该怎么做呢

我希望它是:

array[0] => array(... list of all the values for 2011-02-04),
array[1] => array(...list of all values for 2011-02-05)

假设所有条目的日期格式都相同(看起来是相同的),您可以简单地在数组上循环:

$result = array();

foreach($array as $item) {
    $date = strstr($item['timestamp'], 'T', true);
    if(!array_key_exists($date, $result)) {
        $result[$date] = array();
    }
    $result[$date][] = $item;
}
参考文献:


根据原始数组中项目的顺序,您可能必须使用按时间顺序对
$result
数组进行排序。

在推送新子数组之前,无需检查数组键是否存在。只需将子阵列推入日期键控子阵列

解决方案非常简单:()

分组后,如果要对组进行排序,请对ASC使用
ksort($result)
,或对DESC使用
krsort($result)
。如果要对第一级键重新编制索引,请使用
$result=array\u values($result)

$result = array();

foreach($array as $item) {
    $date = strstr($item['timestamp'], 'T', true);
    if(!array_key_exists($date, $result)) {
        $result[$date] = array();
    }
    $result[$date][] = $item;
}
$result = [];
foreach ($array as $row) {
    $result[substr($row['timestamp'], 0, 10)][] = $row;
}