2013-01-08 25 views
0

創建數組我有一個數組,看起來像這樣:從陣列在同一陣列中的PHP

Array 
(
[0] => Array 
    (
     [LogDate] => Wed , Nov 14 , 2012 
     [LogIDs] => 1,2 
     [LogContents] => Hello!,Hello 2... 
     [LogAuthors] => yan,yan 
     [LogTimes] => 12:00 AM,12:00 AM 
    ) 

[1] => Array 
    (
     [LogDate] => Thu , Nov 15 , 2012 
     [LogIDs] => 3,4 
     [LogContents] => Hello world...,Hi world... 
     [LogAuthors] => jonathan,jonathan 
     [LogTimes] => 12:00 AM,12:00 AM 
    ) 

我要重組它看起來像這樣:

Array 
(
[0] => Array 
    (
     [LogDate] => Wed , Nov 14 , 2012 
     [0] => Array 
      (
       [LogIDs] => 1 
       [LogContents] => Hello! 
       [LogAuthors] => yan 
       [LogTimes] => 12:00 AM 
      ) 
     [1] => Array 
      (
       [LogIDs] => 2 
       [LogContents] => Hello 2... 
       [LogAuthors] => yan 
       [LogTimes] => 12:00 AM 
      ) 
    ) 
[1] => Array 
    (
     [LogDate] => Thu , Nov 15 , 2012 
     [0] => Array 
      (
       [LogIDs] => 3 
       [LogContents] => Hello world... 
       [LogAuthors] => jonathan,jonathan 
       [LogTimes] => 12:00 AM 
      ) 
     [1] => Array 
      (
       [LogIDs] => 4 
       [LogContents] => Hi world... 
       [LogAuthors] => jonathan 
       [LogTimes] => 12:00 AM 
      ) 
    ) 

這可能嗎?

我試圖像(更新版工作):

$result = $this->mymodel->fetch_logs(1, 5, 0); 
    $new_array = array(); 
    $inner_array = array(); 
    $kounter = 0; 
    foreach($result as $row){ 

     $new_array[] = array(
     'LogDate' => $row['LogDate'],   
     ); 

     $log_ids = explode(',',$row['LogIDs']); 
     $log_contents = explode(',',$row['LogContents']); 
     $log_authors = explode(',',$row['LogAuthors']); 
     $log_times = explode(',',$row['LogTimes']); 

     $counter = count($log_ids); 

     for($i=0; $i<$counter; $i++){ 
      $inner_array = array(
       'LogID' => $log_ids[$i], 
       'LogContent' => $log_contents[$i], 
       'LogAuthor' => $log_authors[$i], 
       'LogTime' => $log_times[$i] 
      );        
      //array_push($new_array, $inner_array); 
      $new_array[$kounter][$i] = $inner_array;          
     } 
     $kounter++; 
    } 

但我推inner_array遠不止[LOGDATE]更高的水平。他們應該在同一級別LogDate。任何想法如何實現這一目標?

回答

1

你走了,代碼做你想做的事。請記住,代碼確實期望每個零件具有相同數量的值。所以,如果你有兩個ID,你還需要在內容,時間和時間部分的價值。除了分隔符外,內容中也不能有逗號。

<pre> 
<?php 
$ar[0] = ['LogDate'=>'Wed , Nov 14 , 2012', 'LogIDs' => '1,2', 'LogContents' => 'Hello!,Hello 2...', 'LogAuthors' => 'yan,yan', 'LogTimes' => '12:00 AM,12:00 AM']; 
$ar[1] = ['LogDate'=>'Thu , Nov 15 , 2012', 'LogIDs' => '3,4', 'LogContents' => 'Hello world...,Hi world...', 'LogAuthors' => 'jonathan,jonathan', 'LogTimes' => '12:00 AM,12:00 AM']; 
print_r($ar); 

$newar = []; 
foreach($ar as $key=>$val) { 
    $newar[$key] = []; 
    $date = $val['LogDate']; 
    $arIds = explode(',', $val['LogIDs']); 
    $arContents = explode(',', $val['LogContents']); 
    $arAuthors = explode(',', $val['LogAuthors']); 
    $arTimes = explode(',', $val['LogTimes']); 

    $newar[$key]['LogDate'] = $date; 
    foreach($arIds as $k=>$v) { 
     $tar = []; 
     $tar['LogIDs'] = $v; 
     $tar['LogContents'] = $arContents[$k]; 
     $tar['LogAuthors'] = $arAuthors[$k]; 
     $tar['LogTimes'] = $arTimes[$k]; 

     $newar[$key][] = $tar; 
    } 
} 

print_r($newar); 


?> 
</pre> 

輸出:

Array 
(
    [0] => Array 
     (
      [LogDate] => Wed , Nov 14 , 2012 
      [LogIDs] => 1,2 
      [LogContents] => Hello!,Hello 2... 
      [LogAuthors] => yan,yan 
      [LogTimes] => 12:00 AM,12:00 AM 
     ) 

    [1] => Array 
     (
      [LogDate] => Thu , Nov 15 , 2012 
      [LogIDs] => 3,4 
      [LogContents] => Hello world...,Hi world... 
      [LogAuthors] => jonathan,jonathan 
      [LogTimes] => 12:00 AM,12:00 AM 
     ) 
) 
Array 
(
    [0] => Array 
     (
      [LogDate] => Wed , Nov 14 , 2012 
      [0] => Array 
       (
        [LogIDs] => 1 
        [LogContents] => Hello! 
        [LogAuthors] => yan 
        [LogTimes] => 12:00 AM 
       ) 

      [1] => Array 
       (
        [LogIDs] => 2 
        [LogContents] => Hello 2... 
        [LogAuthors] => yan 
        [LogTimes] => 12:00 AM 
       ) 

     ) 

    [1] => Array 
     (
      [LogDate] => Thu , Nov 15 , 2012 
      [0] => Array 
       (
        [LogIDs] => 3 
        [LogContents] => Hello world... 
        [LogAuthors] => jonathan 
        [LogTimes] => 12:00 AM 
       ) 

      [1] => Array 
       (
        [LogIDs] => 4 
        [LogContents] => Hi world... 
        [LogAuthors] => jonathan 
        [LogTimes] => 12:00 AM 
       ) 

     ) 

) 
+0

感謝您的響應。我也在上面更新了我的代碼,經過一些實驗後,它終於可以工作了。但我認爲我的代碼非常基本。您認爲在處理數百個數據方面哪個更好?我會將您的答案標記爲已接受,但我需要研究您的代碼。再次感謝! –

+1

謝謝。有數百個數據的差異幾乎沒有。我們的代碼有兩個主要區別。你使用'for'循環,並使用'foreach'。 http://stackoverflow.com/questions/3430194/performance-of-for-vs-foreach-in-php進入什麼更快。然後你在一個語句中創建數組,然後我改變每個鍵的值。在我的測試100000記錄你的方式是幾個MS更快 –

+0

感謝您的答覆。這清理了一些東西,特別是你提供的鏈接。 –