【问题标题】:php multidimensional arrays. Change structurephp 多维数组。改变结构
【发布时间】:2021-12-28 09:11:42
【问题描述】:

美好的一天。我有以下问题:

我有一个数组..我想改变它的结构..如果 object_id 不一样,我不想将数组放入父数组。这个怎么做? object_id 917 的数组应该比索引为 1 和 2 的数组高。

例如是否可以在索引 1 处拥有不同 object_id 的数组数组?

object_type就像唯一索引。

初始数组:

$arr = [
    [
        'initiator_id' => 259, 'object_type' => 1, 'object_id' => 905,
        'date'         => '2021-11-16 06:24:16',
    ],
    [
        'initiator_id' => 259, 'object_type' => 1, 'object_id' => 917,
        'date'         => '2021-11-16 06:24:16',
    ],
    
    [
        'initiator_id' => 259, 'object_type' => 1, 'object_id' => 905,
        'date'         => '2021-11-16 04:54:54',
    ],
    [
        'initiator_id' => 259, 'object_type' => 1, 'object_id' => 905,
        'date'         => '2021-11-16 04:53:58',
    ],
    [
        'initiator_id' => 219, 'object_type' => 2, 'object_id' => 915,
        'date'         => '2021-11-16 04:53:58',
    ],
];

数组:

Array
(
    [object_type] => Array
        (
            [1] => Array
                (
                    [0] => Array
                        (
                            [initiator_id] => 259
                            [object_id] => 905
                            [date] => 2021-11-16 06:24:16
                            [activity] => added 
                        )

                    [1] => Array
                        (
                            [initiator_id] => 259
                            [object_id] => 917 
                            [date] => 2021-11-16 06:24:16
                            [activity] => deleted
                        )

                    [2] => Array
                        (
                            [initiator_id] => 259
                            [object_id] => 905
                            [date] => 2021-11-16 04:54:54
                            [activity] => reopen
                        )

                    [3] => Array
                        (
                            [initiator_id] => 259
                            [object_id] => 905
                            [date] => 2021-11-16 04:53:58
                            [activity] => insert
                        )

                )

            [2] => Array
                (
                    [0] => Array
                        (
                            [initiator_id] => 219
                            [object_id] => 915
                            [date] => 2021-11-16 04:53:58
                            [activity] => change
                        )

                )

        )

)

php代码:

foreach($arr as $record) {
    foreach($record as $k => $v) {
        if($k == 'object_type') {
            $newArr['object_type'][$v][] = [
                'initiator_id' => $record['initiator_id'],
                'object_id' => $record['object_id'],
                'date' => $record['date'],
                ];
        }
    }
}

预期结果:

[object_type] => Array
    (
        [1] => Array
            (
        
                [905] => Array
                    (
                        [1] => Array
                            (
                                 [initiator_id] => 219
                                [object_id] => 905
                                [date] => 2021-11-16 04:53:58
                                [activity] => change


                            )

                        [2] => Array
                            (
                                [initiator_id] => 219
                                [object_id] => 905
                                [date] => 2021-11-16 04:53:58
                                [activity] => change

                            )

                    )
                    
                    
                [917] => Array
                    (
                        [1] => Array
                            (
                                [initiator_id] => 219
                                [object_id] => 917
                                [date] => 2021-11-16 04:53:58
                                [activity] => change

                            )

                        [2] => Array
                            (
                                [initiator_id] => 219
                                [object_id] => 917
                                [date] => 2021-11-16 04:53:58
                                [activity] => change
                    
                            )

                    )
                    
                    
            )

        [2] => Array
            (

                [925] => Array
                    (
                        [1] => Array
                            (
                                [initiator_id] => 925
                                [object_id] => 917
                                [date] => 2021-11-16 04:53:58
                                [activity] => change
                            )


                    )

            )

    )

【问题讨论】:

  • 如果object_id都是唯一的,它应该怎么做?
  • 您想要一个新数组顶层的所有initiator_id、object_id、日期“元组”?
  • Justinas,如果 object_id 都是唯一的 .. 它是上面的新数组级别。在一个数组中放入具有相同 object_id 的 olny 数组。
  • Torbjörn Stabo,是的 .. 如果 object_id 不同,所有数据都放在新数组的顶层。在一个数组中只放置具有相同 object_id 的数组。
  • 我的意思是是否有可能在索引 1 处例如具有不同 object_id 的数组数组?

标签: php arrays


【解决方案1】:

只需遍历 $arr 并通过将每个 $arr 项放在所需位置来构建一个新数组:

$result = []; 
foreach($arr as $item) { 
    $result['object_type']
           [$item['object_type']]
           [$item['object_id']] []= $item; 
} 

print_r($result);

[]= 表示“将右侧添加到左侧的数组中”。

编辑添加 object_id 作为第三级。

【讨论】:

  • Torbjörn Stabo,从您的示例中,我不明白如何通过“在一个数组中仅放置具有相同 object_id 的数组”来实现目标......它不起作用。你能用我的数据举个例子吗?
  • @Roman 它创建与问题中相同的数组。你是说你想要$result['object_type'][object_id]['initiator_id' => ..., 'object_id' => ..., 'date' => ...] 之类的东西吗?我不确定我是否理解您想要的输出格式。
  • 我想改变一点当前的数组。起初我想将数据除以 object_type,然后在 object_type 内除以 object_id .. 当我迭代这些数据以绘制控件时,这对我来说很重要前端。
  • @Roman 好的。因此,如果您有一个多次出现的 object_id,您希望保留哪个实例?日期最近的那个?
  • Torbjörn Stabo,我不想删除任何实例。我需要的所有实例。仅添加示例对象的键并按相同的 object_id 对数组进行排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 2021-12-06
  • 2011-08-13
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多