我有一个数组($ datesandadults),其中包含一对值,即日期和人数:
Array (
[0] => stdClass Object (
[thedate] => April 9, 2016
[theadults] => 6
)
[1] => stdClass Object (
[thedate] => April 10, 2016
[theadults] => 9
)
...
我需要修改日期值,然后将所有内容放回到一个新的类似结构化数组中。我的代码不起作用,它给出的是:
Array (
[0] => date
[1] => adults
[thedate] => 2016-04-09
[adults] => )
我使用的代码是:
$final_results = array('thedate','adults');
foreach ($datesandadults as $res2) {
foreach( $res2 as $key => $value) {
if ($key=='thedate') {
$actualtime=strtotime($value);
$value = date('Y-m-d', $actualtime);
}
$final_results[thedate] = $res2->thedate;
$final_results[adults] = $res2->adults;
}
}
我知道我目前的代码是无稽之谈,但也许会让我知道我需要什么......
答案 0 :(得分:0)
你有一个对象数组,而不是数组。您需要遍历对象,创建一个新数组。您可以直接访问对象属性,因此不需要内部foreach
循环。
// initialize empty result array
$final_results = []; // use array() for PHP < 5.4
foreach ($datesandadults as $res2) {
// convert original date value
$actualtime = strtotime($res2->thedate);
$date_value = date('Y-m-d', $actualtime);
// create new object with updated values
$new_object = (object) array(
'thedate' => $date_value,
'theadults' => $res2->theadults
);
// add new object to result array
$final_results[] = $new_object;
}
答案 1 :(得分:0)
首先,您可能希望$final_results
为空数组,因此:
$final_results = array();
然后,您可能想要重构第二个循环,因此它从第一个循环获取每个对象,获取所需信息,然后将其放回新对象中。像这样:
foreach ($datesandadults as $res2) {
$thedate = '';
$theadults = '';
foreach( $res2 as $key => $value) {
if ($key=='thedate') {
$actualtime=strtotime($value);
$thedate = date('Y-m-d', $actualtime);
}else if($key=='theadults'){
$theadults = $value;
}
}
$final_results[] = array(
'thedate'=>$thedate,
'theadults'=>$theadults
);
}
或者只是跳过第二个循环并直接访问值