首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以特定格式输出php数组

问以特定格式输出php数组
EN

Stack Overflow用户
提问于 2017-07-11 06:07:44
回答 5查看 147关注 0票数 0

我试图以一种格式获得以下数组的输出。没有得到

代码语言:javascript
复制
<?php



    $distance_covered = array( '1_JAN_2017' => array('DRIVER_1' => array(2, 5, 3),'DRIVER_2' => array(3, 2, 6, 9)),
        '2_JAN_2017' => array('DRIVER_1' => array(3, 9), 'DRIVER_3' => array(1, 4, 8)),
        '3_JAN_2017' => array('DRIVER_4' => array(9), 'DRIVER_1' => array(2, 7, 5, 2)), 
        '4_JAN_2017' => array('DRIVER_1' => array(5, 3, 3, 2), 'DRIVER_4' => array(4, 9, 8, 5)), 
        '5_JAN_2017' => array('DRIVER_2' => array(8, 5), 'DRIVER_5' => array(3, 9, 7)),
        '6_JAN_2017' => array('DRIVER_5' => array(2, 1, 7, 5),  'DRIVER_4' => array(1, 9, 6)), 

        '7_JAN_2017' => array('DRIVER_4' => array(5, 2, 9), 'DRIVER_3' => array(4, 1, 6)), ); 

上面是我的数组,我想要输出的格式如下:Array ( [DRIVER_1] => 51, [DRIVER_2] => 33, [DRIVER_3] => 24, [DRIVER_4] => 67, [DRIVER_5] => 34 ),这是每个司机在所有行程中所走的距离之和。

我试过这样的代码,有人知道请帮忙

代码语言:javascript
复制
 $res = array();
    foreach($distance_covered as $value) {
        foreach($value as $key => $number) {
            (!isset($res[$key])) ?
                $res[$key] = $number :
                $res[$key] += $number;
        }
    }

    print_r($res);




    ?>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-07-11 06:17:16

这个对我有用

代码语言:javascript
复制
$res = array();
foreach($distance_covered as $value)//the array which you have given us 
{
    foreach($value as $key => $number) //loop over array of date
    {
        if(!isset($res[$key]))//check if the key exist in over defined array if no then run this
        {
            $res[$key] = array_sum($number);// Sum all distances of that driver
            continue;//set the key and continue the foreach... 
        }
        $res[$key] += array_sum($number);// Sum all distances of that driver    
    }
}

print_r($res);      
die;

输出是

代码语言:javascript
复制
Array
(
    [DRIVER_1] => 51
    [DRIVER_2] => 33
    [DRIVER_3] => 24
    [DRIVER_4] => 67
    [DRIVER_5] => 34
)
票数 1
EN

Stack Overflow用户

发布于 2017-07-11 06:16:09

这应该是可行的:

代码语言:javascript
复制
$res = array();
foreach($distance_covered as $value) {
    foreach($value as $key => $number) {
        foreach ($number as $n) {
            if (isset($res[$key])) {
                $res[$key] += $n;
            } else {
                $res[$key] = $n;
            }
        }
    }
}

print_r($res);
票数 1
EN

Stack Overflow用户

发布于 2017-07-11 06:16:24

你们关系很好但是..。

代码语言:javascript
复制
    $res = array ();

    foreach ( $distance_covered as $value ) {
        foreach ( $value as $key=> $driver ) {
            if ( isset($res[$key]) == false ){
                $res[$key]=0;
            }
            $res[$key] += array_sum($driver);
        }
    }

    print_r($res);

第一个预言简单地将数据分解为几天。第二个返回元素,如$key = 'DRIVER_1‘和$driver =数组(3,9)。如果这是您第一次遇到这个驱动程序,那么您需要确保$res中的元素存在,所以将其设置为0。

一旦您知道其中有一个元素,就可以使用+= array_sum($driver)位添加值之和(在本例中为3&9)。+=只是简单地添加而不是a=a+b,您可以说是a+=b。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45026623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档