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

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

问题描述:

I have an array ($datesandadults) with pairs of values which are the date and the number of people:

Array ( 
    [0] => stdClass Object ( 
            [thedate] => April 9, 2016 
            [theadults] => 6
        ) 
    [1] => stdClass Object ( 
            [thedate] => April 10, 2016 
            [theadults] => 9 
        )
...

I need to modify thedate value then put everything back into a new similar structured array. my code doesn't work, all it gives is:

Array ( 
    [0] => date 
    [1] => adults 
    [thedate] => 2016-04-09 
    [adults] => ) 

The code I am using is:

$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;
    }
}

I know my current code is nonsense but maybe will give an idea what I need..

我有一个数组($ datesandadults),其中有一对值,即日期和人数: p>

 数组(
 [0] => stdClass对象(
 [thedate] => 2016年4月9日
 [theadults] => 6 
)\  n [1] => stdClass对象(
 [thedate] => 2016年4月10日
 [theadults] => 9 
)
 ... 
  code>  pre> \  n 
 

我需要修改日期值,然后将所有内容放回到一个新的类似结构化数组中。我的代码不起作用,它给出的是: p>

 数组 (
 [0] => date 
 [1] => adult 
 [thedate] => 2016-04-09 
 [adult] =>)
  code>  pre  > 
 
 

我使用的代码是: p>

  $ final_results = array('thedate','adults'); 
 
foreach($ datesandadults  as $ res2){
 foreach($ res2 as $ key => $ value){
 if($ key =='thedate'){
 $ actualtime = strtotime($ value); 
 $ value =  DA  te('Ym-d',$ actualtime); 
} 
 
 $ final_results [thedate] = $ res2-> thedate; 
 $ final_results [adults] = $ res2-> adult; 
}  
} 
  code>  pre> 
 
 

我知道我现在的代码是无稽之谈,但也许会让我知道我需要什么.. p> div>

You have an array of objects, not arrays. You need to loop through the objects, creating a new array. You can access the object properties directly, so you do not need the interior foreach loop.

// 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;
}

First, you may want $final_results to be an empty array, so:

$final_results = array();

Then, you may want to restructure your second loop, so it gets every object from the first one, takes the needed information, and then put it back in the new one. Like this:

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

Or just skip the second loop and access the values directly