重新排序多维数组元素以将子数组移动到所有子数组中元素列表的底部?

问题描述 投票:0回答:1

解决一个问题会产生另一个问题...... 我已经根据映射数组更新了数组键,但是它将新映射的键移动到数组的底部。我需要元素列表底部的子数组。

重命名键后,数组的截断片段如下所示:

  0 => 
  array (
    'category' => 'Sink',
    'sublineitems' => 
    array (
      0 => 
      array (
        'quantity' => 1,
        'model' => 'PBMS2016-12-X',

        'customerspecificpricings' => 
        array (
        ),
        'electricalutilitygrids' => 
        array (
        ),
        'plumbingutilitygrids' => 
        array (
          0 => 
          array (
            'remarks' => '3-1/2" drain opening',
          ),
        ),
        'subline_item_id' => '844b7c74-b1b7-4f17-a2da-f0c84cef432d',
        'item_type_code' => 0,
        'item_type_description' => 'Normal',
        'vendor_id' => '4e1ab2ef-774e-4c73-be60-c937d1efeb56',
      ),
    ),
    'lineitem_id' => 'e592feab-1e1a-4cfc-a97a-f1108c7156b6',  *** needs to follow 'category' ***
    'item_number' => '1', *** needs to follow 'lineitem_id' ***
  ),

非数字子数组的键用作表名。迭代数组时,在“lineitem_id”和“item_number”之前遇到“sublineitems”子数组。我需要对元素重新排序,以便子数组位于数组/子数组中的其他元素之后。数组嵌套了 6-8 个数组,并且所有数组的键名称都不相同。

我尝试过 array_map(array_values)、array_multisort、json_encode/decode。订单不受影响。

期望的结果是一个将非数组元素分组在每个数组/子数组顶部的数组。


array (
  'category' => 'Mop Sink',
  'lineitem_id' => 'e592feab-1e1a-4cfc-a97a-f1108c7156b6',
  'item_number' => '1',
  'sublineitems' => 
  array (
    0 => 
    array (
      'quantity' => 1,
      'model' => 'PBMS2016-12-X',
      'cube' => 4.0,
      'width' => 24.63,
      'depth' => 19.38,
      'height' => 16.0,
      'gtin' => 'null|null|null',
      'subline_item_id' => '844b7c74-b1b7-4f17-a2da-f0c84cef432d',
      'item_type_code' => 0,
      'item_type_description' => 'Normal',
    ....
      'customerspecificpricings' => 
      array (
      ),
      'electricalutilitygrids' => 
      array (
      ),
      'plumbingutilitygrids' => 
      array (
        0 => 
        array (
          'remarks' => '3-1/2" drain opening',
        ),
      ),
      'gassteamutilitygrids' => 
      array (
      ),
      'hvacutilitygrids' => 
      array (
      ),
php arrays sorting multidimensional-array
1个回答
0
投票

使用递归方法对每个级别的数据类型进行排序。

我的代码片段将通过引用进行修改(函数不会“返回”数组)。

代码:(演示

function sortByDataTypeRecursive(array &$array)
{
    uasort($array, fn($a, $b) => is_array($a) <=> is_array($b));
    //asort($array); <-- this is slightly different because it implement a more complex sort on values
    foreach ($array as &$v) {
        if (is_array($v)) {
            (__FUNCTION__)($v);
        }            
    }
}

sortByDataTypeRecursive($array);
var_export($array);
© www.soinside.com 2019 - 2024. All rights reserved.