duan1396
2015-11-17 21:21
浏览 372
已采纳

如何使用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..

图片转代码服务由CSDN问答提供 功能建议

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

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

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

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

我使用的代码是:

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongmou9260 2015-11-17 21:33
    已采纳

    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;
    }
    
    点赞 打赏 评论
  • douxingmou4533 2015-11-17 21:36

    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

    点赞 打赏 评论

相关推荐 更多相似问题