【问题标题】:How to get the highest and lowest Values and sum from Multidimensional array in PHP如何从PHP中的多维数组中获取最高和最低值和总和
【发布时间】:2017-09-24 01:34:33
【问题描述】:

我在这里尝试过使用这个例子Return index of highest value in an array

但这不会进入多维数组

我尝试了 ARRAY_COLUMN()、array_values()、array_shift、Max 和 Min,但他们没有得到我需要的信息

我希望能够循环并到达:

[定价]

然后检查定价以查看嵌套数组中的最高和最低

就像下面这些日期的最高和最低交易总数

[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]

【问题讨论】:

  • 最后一个时间戳是按数组值的顺序出现的最后一个或与其他时间戳比较的值?
  • 我会编辑的!

标签: php arrays multidimensional-array


【解决方案1】:

您问题中的数组:

$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
        )

)

编辑

获取[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
                )

        )

)

【讨论】:

  • 它没有打印出来,我错过了什么吗?
  • 使用print_r($values);
  • 这就是我所做的......我明白了为什么,我没有注意到你称它为 $array 我的是 newArray,......为此工作了好几个小时!这很好用,我认为也会帮助其他人
  • 我知道我有点搞砸了。我还需要获得 [first_timestamp] 和 [last_timestamp] 的定价。这是可以做的事情还是需要成为一个新功能?
猜你喜欢
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2019-04-23
  • 2020-02-02
  • 2022-01-05
相关资源
最近更新 更多