2017-04-21 9 views
0

私は配列を同じ日付のオブジェクトでグループ化する方法を考えています。 私はMySQLのクエリ(私のテーブルから日時、IP、ヴァルを選択)から、この結果を持っている:以下のようにJSON配列オブジェクトを作成するために新しい配列に同じ日付でグループ化するJSON配列オブジェクトを作成しますか?

DateTime     ip      Val 
2017-02-01 08:00:23  10.10.10.1    2 
2017-02-01 09:01:23  10.10.10.2    3 
2017-02-01 12:02:23  10.10.10.3    4 
2017-02-02 13:03:23  10.10.10.4    5 
2017-02-03 15:04:23  10.10.10.5    6 
2017-02-03 20:05:23  10.10.10.6    7 

MySQLのクエリの結果から、

$sql = "select DateTime ,ip,Val from my table order by DateTime ASC ;"; 
$result = $db->query($sql); 
$data = array(); 
$rowary = array(); 
$i=0; 
while($row = mysqli_fetch_array($result)) 
{ 
    $rowary['DateTime'] = $row['DateTime '] ; 
    $rowary['ip'] = $row['ip'] ; 
    $rowary['Val'] = $row['Val'] ; 
    $data[$i++]=$rowary; 
    } 
echo '<pre>' . var_export($data, true) . '</pre>'; 

は、することが可能です、私はJavaScriptで

var data = <?php echo json_encode($Data, JSON_PRETTY_PRINT);?> 

使用している場合は、同じ日付で、そのグループJSON配列オブジェクトを作成

期待される結果は次のとおりです。

[ 
    [ 
     { 
     "DateTime": "2017-02-01 08:00:23", 
     "ip": "10.10.10.1", 
     "Val": "2" 
     }, 
     { 
     "DateTime": "2017-02-01 09:01:23", 
     "ip": "10.10.10.2", 
     "Val": "3" 
     }, 
     { 
     "DateTime": "2017-02-01 12:02:23", 
     "ip": "10.10.10.3", 
     "Val": "4" 
     } 
    ], 
    [ 
    { 
     "DateTime": "2017-02-02 13:03:23", 
     "ip": "10.10.10.4", 
     "Val": "5" 
    } 
    ], 
    [ 
    { 
     "DateTime": "2017-02-03 15:04:23", 
     "ip": "10.10.10.5", 
     "Val": "6" 
    }, 
    { 
     "DateTime": "2017-02-03 20:05:23", 
     "ip": "10.10.10.6", 
     "Val": "7" 
    } 
    ] 

] 

がどのように私は同じ日付でJSON配列オブジェクトグループを作成することができますか?

+0

不明な点は何ですか? –

+0

すみません。私は質問をより明確にしています。 – georgetovrea

+0

期待どおりの出力を追加できますか? –

答えて

1

次に、このようん、ASCまたはDSCために、MySQLからのデータを取得: -

$a = array(
    array(
     'DateTime' => '2017-02-01 08:00:23', 
     'ip'  => '10.10.10.1', 
     'Val'  => '1' 
    ), 
    array(
     'DateTime' => '2017-02-01 09:01:23', 
     'ip'  => '10.10.10.2', 
     'Val'  => '2' 
    ), 
    array(
     'DateTime' => '2017-02-02 09:01:23', 
     'ip'  => '10.10.10.3', 
     'Val'  => '3' 
    ), 
    array(
     'DateTime' => '2017-02-02 13:03:23', 
     'ip'  => '10.10.10.4', 
     'Val'  => '4' 
    ), 
    array(
     'DateTime' => '2017-02-03 15:04:23', 
     'ip'  => '10.10.10.5', 
     'Val'  => '5' 
    ), 
    array(
     'DateTime' => '2017-02-03 20:05:23', 
     'ip'  => '10.10.10.6', 
     'Val'  => '6' 
    ), 
); 

$FirstDate = date('Y-m-d', strtotime($a[0]['DateTime'])); 
$output = array(); 
$i = 0; 

foreach($a as $value){ 

    $currentDate = date('Y-m-d', strtotime($value['DateTime'])); 

    if($currentDate != $FirstDate){ 
     $i++; 
     $FirstDate = $currentDate; 
    }  

    $output[$i][] = $value; 

} 

var_dump($output); 
+0

アシュート、私は配列を作成しようとしている、あなたが言ったようにしても、私は望む結果を得ることができません。私は私の質問に配列コードを作成する追加しました – georgetovrea

0

これはJavascript

あなたがこの参照してください http://underscorejs.org/#groupBy

ためUnderscoreJSライブラリを使用することができます

になる可能性

このようにすることができます

"vアルゴンA = [{ '日時': '2017年2月1日8時00分23秒'、 'IP':'10 .10.10.1' 'ヴァル': '1' }、

 { 
    'DateTime' :'2017-02-01 09:01:23', 
    'ip'  :'10.10.10.2', 
    'Val'  : '2' 
    }, 

    { 
    'DateTime' :'2017-02-02 09:01:23', 
    'ip'  :'10.10.10.3', 
    'Val'  : '3' 
    }, 

    { 
    'DateTime' :'2017-02-02 13:03:23', 
    'ip'  :'10.10.10.4', 
    'Val'  : '4' 
    }, 

    { 
    'DateTime' :'2017-02-03 15:04:23', 
    'ip'  :'10.10.10.5', 
    'Val'  : '5' 

    }, 

    { 
    'DateTime' :'2017-02-03 20:05:23', 
    'ip'  :'10.10.10.6', 
    'Val'  : '6' 
    }]; 

そしてこの

_.groupByようなユーザ_.groupBy関数(関数(OBJ){戻り、新たな日(obj.DateTime).toDateString()});」

希望すると助かります

関連する問題