我就是不明白,它实际上是如此基本,但我就是不能实现它。我有以下数组:
Array (
[15] => Array (
[id] => 15
[name] => Name of course
[date] => 1300863780
[price] => 0 )
[14] => Array (
[id] => 14
[name] => Name of course
[date] => 1303545780
[price] => 0 )
)
我只是想重新排列一下,让它看起来像:
Array (
[03] => Array (
[id] => Array(15)
[name] => Array(Name of course)
[day] => Array(23)
[year] => Array(2011)
[price] => Array(0) )
[04] => Array (
[id] => Array(14)
[name] => Array(Name of course)
[day] => Array(23)
[year] => Array(2011)
[price] => Array(0) )
)
解释一下:我想把月份(从[date]计算)作为主键,然后或多或少地列出每个字段对应的字段/一些新的字段。以后在同一个月里会有更多的条目,所以这样安排是有意义的。
我得到的是以下内容,为了foo的缘故,我不明白为什么它不能这样工作(并且没有其他方法我可以提出)。$this->data就是上面的数组!
<?php
foreach($this->data as $field)
{
while(list($id, $name, $date, $price) = each($field))
{
$month = date('m',$date);
$this->month[$month]['id'] = $id;
$this->month[$month]['name'] = $name;
$this->month[$month]['day'] = date('F',$date);
$this->month[$month]['year'] = date('Y',$date);
$this->month[$month]['price'] = $price;
}
}
?>
我得到的只是在list()语句行中成堆的"未定义偏移"通知。非常感谢你的帮助!!
应该这样做:
$rearranged = array();
foreach ($this->data as $data) {
$rearranged[date('m', $data['date'])][] = array(
'id' => array($data['id']),
'name' => array($data['name']),
'day' => array(date('F', $data['date'])),
'year' => array(date('Y', $data['date'])),
'price' => array($data['price'])
);
}
解释一下:我想让月份(从[date]计算)为主键,然后或多或少列出每个字段在他们的相应的字段/一些新的字段。以后还会有更多同一个月的条目,所以这样安排是有意义的。
正如我在评论中所写的,在读了这篇文章之后,我不会将所有这些id
, name
等存储为数组。$this->month[$month][$n]['id']
是要走的路,而不是$this->month[$month]['id'][$n]
,也就是说,你需要多个"数组的id
, name
等"而不是"单独的id
数组,另一个name
数组等"。
function convert(array $data) {
$result = array();
foreach ( $data as $value ) {
$month = date('m', $value['date']);
$value['day' ] = date('d', $value['date']);
$value['year'] = date('Y', $value['date']);
unset($value['date']);
$result[$month][] = $value;
}
return $result;
}
$data = array(
15 => array(
'id' => '15',
'name' => 'Name of course',
'date' => '1300863780',
'price' => '0',
),
16 => array(
'id' => '16',
'name' => 'Name of course',
'date' => '1300863780',
'price' => '0',
),
14 => array(
'id' => '14',
'name' => 'Name of course',
'date' => '1303545780',
'price' => '0',
),
);
print_r(convert($data));
输出:Array
(
[03] => Array
(
[0] => Array
(
[id] => 15
[name] => Name of course
[price] => 0
[day] => 23
[year] => 2011
)
[1] => Array
(
[id] => 16
[name] => Name of course
[price] => 0
[day] => 23
[year] => 2011
)
)
[04] => Array
(
[0] => Array
(
[id] => 14
[name] => Name of course
[price] => 0
[day] => 23
[year] => 2011
)
)
)
遍历数组并相应地更改项。在此过程中,收集新的键名,然后合并新的数组(Demo):
$keys = array();
foreach($array as &$v)
{
$keys[] = date('m', $v['date']);
$v['day'] = date('d', $v['date']);
$v['year'] = date('Y', $v['date']);
unset($v['date']);
foreach($v as &$v2)
$v2 = array($v2);
unset($v2);
}
unset($v);
$array = array_combine($keys, $array);