Добавьте общее количество и устройства в один массив, если время в PHP одинаковое - PullRequest
0 голосов
/ 03 мая 2018

Массив выглядит так

$deviceInfo = ([time] => 2018-03-28 03:00 PM,[deviceName] => "Samsung" ,[total]=>1),
([time] => 2018-03-28 03:00 PM,[deviceName] => "Sony",[total]=>1),
([time] => 2018-03-28 03:00 PM,[deviceName] => "Apple",[total]=>1)
([time] => 2018-03-29 03:00 PM,[deviceName] => "Samsung",[total]=>1)

Можно ли получить вывод, как показано ниже

([time] => 2018-03-28 03:00 PM,[deviceName] => ["Samsung","Apple","Sony"] ,[total]=>3),
([time] => 2018-03-29 03:00 PM,[deviceName] => "Samsung",[total]=>1)

Я попробовал приведенный ниже код, но он не работает должным образом.

   $res  = array();
    foreach($deviceInfo as $vals){
        if(array_key_exists($vals['time'],$res)){
            $res[$vals['time']]['deviceName']    = $vals['deviceName'];
            $res[$vals['time']]['total']   += $vals['total'];
            $res[$vals['time']]['time']        = $vals['time'];
        }
        else{
            $res[$vals['time']]  = $vals;
        }
    }

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Попробуйте это: взорвите имя устройства и массив_сумму для всех, чьи ключи одинаковы

$deviceInfo = array( 
array('time' => "2018-03-28 03:00 PM", 'deviceName' => "Samsung" , 'total' => "1"),
array('time' => "2018-03-28 03:00 PM", 'deviceName' => "Sony", 'total' => "1"),
array('time' => "2018-03-28 03:00 PM", 'deviceName' => "Apple", 'total' => "1"),
array('time' => "2018-03-29 03:00 PM", 'deviceName' => "Samsung", 'total' => "1")
);
$new = array();
foreach($deviceInfo as $dInfo) {
    $new[$dInfo['time']][] = array('deviceName' =>$dInfo['deviceName'], 'total' =>$dInfo['total']);
}

foreach($new as $k=>$v){
    $final[$k] = array('deviceName'=>implode(',',  array_column($v, 'deviceName')), 'total'=>array_sum(array_column($v, 'total'))); 
    // you can include time like this
    //$final[] = array('time'=>$k, 'deviceName'=>implode(',',  array_column($v, 'deviceName')), 'total'=>array_sum(array_column($v, 'total'))); 
}
print_r($final);

Демо

0 голосов
/ 03 мая 2018

Вы можете получить его по приведенному ниже коду. Пожалуйста, поймите это при интеграции. :)

<code>$args = array( 
array('time' => "2018-03-28 03:00 PM", 'deviceName' => "Samsung" , 'total' => "1"),
array('time' => "2018-03-28 03:00 PM", 'deviceName' => "Sony", 'total' => "1"),
array('time' => "2018-03-28 03:00 PM", 'deviceName' => "Apple", 'total' => "1"),
array('time' => "2018-03-29 03:00 PM", 'deviceName' => "Samsung", 'total' => "1")
);

$tmp = array();

foreach($args as $arg) {
    $tmp[$arg['time']][] = $arg['deviceName'];
}

$output = array();

foreach($tmp as $time => $labels) {
    $output[] = array(
        'time' => $time,
        'deviceName' => $labels,
        'total' => count($labels)
    );
}
echo '<pre>';
print_r($output);
echo '
';

Вы можете увидеть ДЕМО ЗДЕСЬ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...