我有一个这样的数组:
array(
[0] => array(
'date' => '2017-12-20',
'name' => 'test A',
'kwa' => 'kwa1, kwa2'
),
[1] => array(
'date' => '2017-12-20',
'name' => 'test B',
'kwa' => ''
),
[2] => array(
'date' => '2017-12-21',
'name' => 'test C',
'kwa' => 'kwa1'
),
[3] => array(
'date' => '2017-12-22',
'name' => 'test D',
'kwa' => ''
),
[4] => array(
'date' => '2017-12-22',
'name' => 'test E',
'kwa' => ''
),
)
我想将所有具有同一天的元素分组到一个数组中。类似这样的东西:
array(
['2017-12-20'] => array( '0', '1'),
['2017-12-21'] => array( '2' ),
['2017-12-22'] => array( '3', '4' ),
)
这是您的解决方案...
输入
<?php
$array = array(
array(
'date' => '2017-12-20',
'name' => 'test A',
'kwa' => 'kwa1, kwa2'
),array(
'date' => '2017-12-20',
'name' => 'test B',
'kwa' => ''
),array(
'date' => '2017-12-21',
'name' => 'test C',
'kwa' => 'kwa1'
),array(
'date' => '2017-12-22',
'name' => 'test D',
'kwa' => ''
),array(
'date' => '2017-12-22',
'name' => 'test E',
'kwa' => ''
),
);
解决方案
$new = array();
foreach($array as $r){
$new[$r['date']][] = array('name'=>$r['name'],'kwa' => $r['kwa']);
}
echo "<pre>";print_r($new);
?>
输出
Array
(
[2017-12-20] => Array
(
[0] => Array
(
[name] => test A
[kwa] => kwa1, kwa2
)
[1] => Array
(
[name] => test B
[kwa] =>
)
)
[2017-12-21] => Array
(
[0] => Array
(
[name] => test C
[kwa] => kwa1
)
)
[2017-12-22] => Array
(
[0] => Array
(
[name] => test D
[kwa] =>
)
[1] => Array
(
[name] => test E
[kwa] =>
)
)
)
$arr = array();
foreach($array1 as $key => $item)
{
$arr[$item['date']][$key] = $key;
}
echo "<pre>";
print_r($arr);
我会使用类似以下的东西:
$array = [
[
'date' => '2017-12-20',
'name' => 'test A',
'kwa' => 'kwa1, kwa2'
],
[
'date' => '2017-12-20',
'name' => 'test B',
'kwa' => ''
],
[
'date' => '2017-12-21',
'name' => 'test C',
'kwa' => 'kwa1'
],
[
'date' => '2017-12-22',
'name' => 'test D',
'kwa' => ''
],
[
'date' => '2017-12-22',
'name' => 'test E',
'kwa' => ''
],
];
$formatted = [];
foreach ($array as $k => $v) {
$formatted[$v['date']] = $formatted[$v['date']] ?? [];
array_push($formatted[$v['date']], $k);
}
print_r($formatted);
因为 PHP 的
foreach()
在每次迭代中在键之前赋值,所以可以实现无体循环。
数组解构语法用于为日期列值声明一个变量,然后将键作为新值推送到结果的特定于日期的子数组中。
代码:(演示)
$result = [];
foreach ($array as $result[$d][] => ['date' => $d]);
var_export($result);
输出:
array (
'2017-12-20' =>
array (
0 => 0,
1 => 1,
),
'2017-12-21' =>
array (
0 => 2,
),
'2017-12-22' =>
array (
0 => 3,
1 => 4,
),
)