解决一个问题就会产生另一个问题. 我让基于映射数组的数组键进行更新,但是它会将新映射的键移动到数组的底部.我需要元素列表底部的子array.

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

  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’之前遇到了‘subineItems’子array.我需要对元素重新排序,以便子数组排在数组/子数组中的其他元素之后.这些数组的嵌套深度为6-8个数组,并且所有数组的键名称并不相同.

我try 过ARRAY_MAP(ARRAY_VALUES)、ARRAY_MULTSORT、JSON_ENCODE/DECODE.订单不受影响.

期望的结果是在每个数组/子数组的顶部对非数组元素进行分组的array.


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 (
      ),

我使用Kluge解决了Line Items数组的直接问题:

        if(isset($value['sublineitems'])){
            $value['sublineitems2'] = $value['sublineitems'];
            unset($value['sublineitems']);
            $value['sublineitems'] = $value['sublineitems2'];
            unset($value['sublineitems2']);
        }

但这里一定有更好的方法... 谢谢!

推荐答案

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

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

代码:(Demo)

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

Php相关问答推荐

此行动未经授权.升级Laravel时

如何在数据库中添加注册表单中的动态新行?

允许Laravel路由指定`withTrashed`,尽管有显式的模型绑定

在函数内部获取一致的单选按钮值以更新WordPress用户数据

我需要多个SELECT语句的结果(使用由php ECHO创建的表中显示的Limit(X)

照明\Support\Collection::Filter():参数#1($Callback)的类型必须为?可调用、已给定数组、已调用

使用PHP阅读XML提要

获取要删除的图像的公共ID

如何在php中生成包含第100秒的时间序列?

目标类[Set_Locale]不存在.拉威尔

首先在WooCommerce我的帐户订单页面中移动操作按钮

未定义的类型';PDF';在Laravel 8

以编程方式同步 WPML 翻译更改 Woocommerce 产品销售价格

如何用十进制和字母数字减go 和添加 id

Laravel 在数据库上显示加密列

如果在 APIPlatform 3.1 中的同一资源上使用处理器,Messenger 将无法工作

标签打印机的 CSS

计算数组中连续值的数量

MySQLI bind_param导致的Cannot modify readonly property错误

PHP 将数组值插入到 csv 列