2017-09-24 72 views
2

我已经在这里使用这个例子Return index of highest value in an array如何从多维数组中的最高值和最低值和总和PHP

尝试,但不进入一多维数组

我已经试过ARRAY_COLUMN() ,array_values(),array_shift,最大和最小,但他们没有得到的信息,我需要

我希望能环通,并获得:

[价格]

然后查看定价,看看哪些是最高和最低的嵌套数组中

所以像下面这总有人在上述日期

[2017-09-22] 
[2017-09-23] 

明显最高和最低行业[2017-09 -23]是一个简单的,我只是希望添加更多的代码为ppl帮助去通过。

我创建数组是这样的:

Array 
    (
    [2017-09-23] => Array 
    (
     [0] => Array 
      (
       [timestamp] => 1506169387000 
       [pricing] => 9.5470 
       [qty] => 25 
       [total] => 238.675 
       [date] => 2017-09-23 
      ) 

    ) 

[2017-09-22] => Array 
    (
     [0] => Array 
      (
       [timestamp] => 1506093083000 
       [pricing] => 9.6300 
       [qty] => 25 
       [total] => 240.75 
       [date] => 2017-09-22 
      ) 

     [1] => Array 
      (
       [timestamp] => 1506077220000 
       [pricing] => 8.7190 
       [qty] => 13 
       [total] => 113.347 
       [date] => 2017-09-22 
      ) 

     [2] => Array 
      (
       [timestamp] => 1506077109000 
       [pricing] => 8.6800 
       [qty] => 83 
       [total] => 720.44 
       [date] => 2017-09-22 
      ) 

     [3] => Array 
      (
       [timestamp] => 1506065258000 
       [pricing] => 8.7100 
       [qty] => 25 
       [total] => 217.75 
       [date] => 2017-09-22 
      ) 

    ) 
在例如

上述,我想它创建只是一个新的数组以下

date -> last timestamp -> Highest pricing -> Lowest lowest -> Total of all Totals -> first Timestamp 

编辑:最后和第一次时间戳基本上是第一次也是最后一次索引,所以在这种情况下:

[timestamp] => 1506093083000 and [timestamp] => 1506065258000 

或索引[0]和索引[3]

+0

最后的时间戳是按照数组值排序的最后一个值还是与其他时间戳比较的值? – kip

+0

我会编辑它! –

回答

3

从你的问题的阵列:

$array = array (
    '2017-09-23' => 
    array (
    0 => 
    array (
     'timestamp' => '1506169387000', 
     'pricing' => '9.5470', 
     'qty' => '25', 
     'total' => '238.675', 
     'date' => '2017-09-23', 
    ), 
), 
    '2017-09-22' => 
    array (
    0 => 
    array (
     'timestamp' => '1506093083000', 
     'pricing' => '9.6300', 
     'qty' => '25', 
     'total' => '240.75', 
     'date' => '2017-09-22', 
    ), 
    1 => 
    array (
     'timestamp' => '1506077220000', 
     'pricing' => '8.7190', 
     'qty' => '13', 
     'total' => '113.347', 
     'date' => '2017-09-22', 
    ), 
    2 => 
    array (
     'timestamp' => '1506077109000', 
     'pricing' => '8.6800', 
     'qty' => '83', 
     'total' => '720.44', 
     'date' => '2017-09-22', 
    ), 
    3 => 
    array (
     'timestamp' => '1506065258000', 
     'pricing' => '8.7100', 
     'qty' => '25', 
     'total' => '217.75', 
     'date' => '2017-09-22', 
    ), 
), 
); 

要得到的值也许你可以使用array_map以及与此功能array_column是一切的关键,试试这个:

$values = array_map(function($dates) { 
    $timestamps = array_column($dates, 'timestamp'); 
    $pricings = array_column($dates, 'pricing'); 
    return [ 
     'max_pricing' => max($pricings), 
     'lowest_pricing' => min($pricings), 
     'total_of_totals' => array_sum(array_column($dates, 'total')), 
     'first_timestamp' => reset($timestamps), 
     'last_timestamp' => end($timestamps), 
    ]; 
}, $array); 

$values是您需要的过滤器值的数组:

Array 
(
    [2017-09-23] => Array 
     (
      [max_pricing] => 9.5470 
      [lowest_pricing] => 9.5470 
      [total_of_totals] => 238.675 
      [first_timestamp] => 1506169387000 
      [last_timestamp] => 1506169387000 
     ) 

    [2017-09-22] => Array 
     (
      [max_pricing] => 9.6300 
      [lowest_pricing] => 8.6800 
      [total_of_totals] => 1292.287 
      [first_timestamp] => 1506093083000 
      [last_timestamp] => 1506065258000 
     ) 

) 

EDIT

获取[first_timestamp][last_timestamp]

$values = array_map(function($dates) { 
    $timestamps = array_column($dates, 'timestamp'); 
    $pricings = array_column($dates, 'pricing'); 
    return [ 
     'max_pricing' => max($pricings), 
     'lowest_pricing' => min($pricings), 
     'total_of_totals' => array_sum(array_column($dates, 'total')), 
     'first_timestamp' => [ 
      'value' => reset($timestamps), 
      'pricing' => $pricings[each($timestamps)['key']] 
     ], 
     'last_timestamp' => [ 
      'value' => end($timestamps), 
      'pricing' => $pricings[each($timestamps)['key']] 
     ] 
    ]; 
}, $array); 

定价我添加了一个阵列到两个时间戳与这些值和定价。

Array 
(
    [2017-09-23] => Array 
     (
      [max_pricing] => 9.5470 
      [lowest_pricing] => 9.5470 
      [total_of_totals] => 238.675 
      [first_timestamp] => Array 
       (
        [value] => 1506169387000 
        [pricing] => 9.5470 
       ) 

      [last_timestamp] => Array 
       (
        [value] => 1506169387000 
        [pricing] => 9.5470 
       ) 

     ) 

    [2017-09-22] => Array 
     (
      [max_pricing] => 9.6300 
      [lowest_pricing] => 8.6800 
      [total_of_totals] => 1292.287 
      [first_timestamp] => Array 
       (
        [value] => 1506093083000 
        [pricing] => 9.6300 
       ) 

      [last_timestamp] => Array 
       (
        [value] => 1506065258000 
        [pricing] => 8.7100 
       ) 

     ) 

) 
+0

它没有打印出来,我错过了什么? –

+0

使用'print_r($ values);' – kip

+0

这就是我做的...我明白了为什么,我没有注意到你把它叫做$ array我是newArray,......在这个工作上花费大量时间!这工作很好,我认为也会帮助别人 –

相关问题