在PHP中从相同数组中的数组创建数组


Create array from an array in the same array in 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处于同一级别。有什么办法吗?

好了,代码可以做你想做的了。请记住,代码并不期望每个部分有相同数量的值。如果你有两个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
                )
        )
)