【问题标题】:php use array_slice in nested arrayphp 在嵌套数组中使用 array_slice
【发布时间】:2021-11-10 12:26:03
【问题描述】:

我有一个这样的数组

$data = array( 
    '2021-08-31' => array( 'country_id' => array( '191' => array( '20098' ) ) ),
    '2021-08-18' => array( 'country_id' => array( '214' => array( '14876' ) ) ),
    '2021-07-12' => array( 'country_id' => array( '103' => array( '19709' ) ) ),
    '2021-07-07' => array( 'country_id' => array( '206' => array( '9568' ) ) ),
    '2021-06-28' => array( 'country_id' => array( '246' => array( '19561' ), '132' => array( '19277' ), '1' => array( '2816' ), '83' => array( '19530' ), '21' => array('3340'), '202' => array( '14136' ), '103' => array( '17006' ) ) ),
    '2021-06-25' => array( 'country_id' => array( '99' => array( '14561' ), '102' => array( '26789' ), '21' => array( '7690' ), '21' => array( '242325' ), '11' => array('436432'), '999' => array( '43734' ), '768' => array( '34437' ) ) ),

);

这里我只想为country_id 元素应用array_slice。 所以让我们说如果我想显示国家 ID 的前 6 个元素,那么它应该是这样的

$data = array( 
    '2021-08-31' => array( 'country_id' => array( '191' => array( '20098' ) ) ),
    '2021-08-18' => array( 'country_id' => array( '214' => array( '14876' ) ) ),
    '2021-07-12' => array( 'country_id' => array( '103' => array( '19709' ) ) ),
    '2021-07-07' => array( 'country_id' => array( '206' => array( '9568' ) ) ),
    '2021-06-28' => array( 'country_id' => array( '246' => array( '19561' ), '132' => array( '19277' ) ) ),
);

如果我想显示从 3 到 9 的元素,那么它应该显示类似这样的内容

$data = array( 
    '2021-07-12' => array( 'country_id' => array( '103' => array( '19709' ) ) ),
    '2021-07-07' => array( 'country_id' => array( '206' => array( '9568' ) ) ),
    '2021-06-28' => array( 'country_id' => array( '246' => array( '19561' ), '132' => array( '19277' ), '1' => array( '2816' ), '83' => array( '19530' ), '21' => array('3340') ) ),
);

那么有人可以告诉我如何在不更改上述数组的键值对的情况下实现这一点。 任何帮助和建议都会非常感激。

【问题讨论】:

  • 可以通过array_map方法php.net/manual/en/function.array-map.php来完成。这将遍历外部数组,然后回调将根据给定参数使用切片并返回具有特定 country_id 节点的数组。
  • 或 array_walk 可能更简单,因为听起来您可能希望将参数传递给回调方法以更改返回的 country_ids。 php.net/manual/en/function.array-walk.php
  • @SmileIT 你能分享一些上述问题的示例代码,这样会更好。

标签: php arrays sorting arraylist


【解决方案1】:

以下逻辑可能会对您有所帮助。只需使用$start$end 设置要提取的切片,结果将存储在数组$store 中:

// set your slice with start and end
$start = 3;
$end = 9;

$count = 0;
$store = []; // the result store
foreach($data as $date => $record) {
    foreach($record['country_id'] as $k => $countryIds) {
        foreach($countryIds as $id) {
            $count++;
            if($count >= $start && $count <= $end) $store[$date]['country_id'][$k] = $countryIds;
        }
    }
}

demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-09
    • 2013-07-17
    • 2013-06-17
    • 1970-01-01
    • 2021-07-31
    • 2012-07-11
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多