如何在foreach循环中使用现有数组值在PHP中创建新数组

时间:2015-11-17 21:21:51

标签: php arrays foreach

我有一个数组($ 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;
    }
}

我知道我目前的代码是无稽之谈,但也许会让我知道我需要什么......

2 个答案:

答案 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
  );
}

或者只是跳过第二个循环并直接访问值