首页 > 解决方案 > 动态重命名多维数组中的多个键

问题描述

我正在研究将数组导入另一个数组的代码。

将持续存在的阵列汽车

array (
  0 => 
  array (
    'Brand' => 'Volvo',
    'Stock Value' => 100,
    'Models' => 96,
  ),
  1 => 
  array (
    'Brand' => 'BMW',
    'Stock Value' => 60,
    'Models' => 59,
  ),
  2 => 
  array (
    'Brand' => 'Toyota',
    'Stock Value' => 110,
    'Models' => 100,
  ),
)

我要导入的数组emobile :

array (
  0 => 
  array (
    'Maker' => 'Tesla',
    'Price' => 100,
    'Factories' => 96,
    'Employees' => 10,
  ),
  1 => 
  array (
    'Maker' => 'Nikola',
    'Price' => 60,
    'Factories' => 59,
    'Employees' => 10,
  ),
  2 => 
  array (
    'Maker' => 'Thor',
    'Price' => 110,
    'Factories' => 100,
    'Employees' => 10,
  ),
)

发布数据$pst_data(键 = 目标结构,值 = 当前结构,--- 未分配):

array (
  'Brand' => 'Maker',
  'Stock_Value' => '---',
  'Models' => '---',
  'flag' => '---',
)

我的代码。在当前阶段,我可以让它碰巧显示导入数组中的一个值,例如制造商的名称,或者我选择两个(“Stock Value”作为第二个)并且有结构,但没有值。

foreach ($kar as $xk => $vx) {
    if(!in_array($vx, $pst_data)){
        foreach ($emobile as &$xkone) {
            unset($xkone[$vx]);
        }
    }
    else {
        foreach ($pst_data as $pstd => $pstd_val) {
            foreach ($emobile as &$xkone) {
              $xkone[$pstd] = $xkone[$pstd_val];
              unset($xkone[$pstd_val]);
            }

        }
    }
}

我的目标结果是:

Array
(
    [0] => Array
        (
            [Brand] => Volvo
            [Stock Value] => 100
            [Models] => 96
            [flag] => 1
        )

    [1] => Array
        (
            [Brand] => BMW
            [Stock Value] => 60
            [Models] => 59
            [flag] => 1
        )

    [2] => Array
        (
            [Brand] => Toyota
            [Stock Value] => 110
            [Models] => 100
            [flag] => 1
        )
    [3] => Array
        (
            [Brand] => Tesla
            [Stock Value] => 100
            [Models] => 
            [flag] => 
        )    
    [4] => Array
        (
            [Brand] => Nikola
            [Stock Value] => 60
            [Models] => 
            [flag] => 
        )
    [5] => Array
        (
            [Brand] => Thor
            [Stock Value] => 110
            [Models] => 
            [flag] => 
        )
)

所以我的目标是选择一个数组导入另一个数组。在一个表单中,我将导入数组中的键分配给现有数组并提交它以创建一个数组,其中包含键并将键分配为值。如果指定的值(如 Maker)存在,则此键将保留在导入的数组中。所有其他键都将被删除。以下是键的重命名,例如从 Maker 到 Brand,以及从 Price 到 Stock Value。然后我会将这两个数组与 array_merge 合并。

如何解决问题以使用导入数组中的单个值和多个值?

使用以下命令编辑单个数据分配的示例$pst_data

array (
  'Brand' => 'Maker',
  'Stock_Value' => '---',
  'Models' => '---',
  'flag' => '---',
)

以及第一个新插入数组的示例结果:

[3] => Array
    (
        [Brand] => Tesla
        [Stock_Value] => 
        [Models] => 
        [flag] => 
    )

使用分配的多个数据的示例$pst_data

array (
  'Brand' => 'Maker',
  'Stock_Value' => 'Price',
  'Models' => '---',
  'flag' => '---',
)

以及第一个新插入数组的示例结果:

[3] => Array
    (
        [Brand] => 
        [Stock_Value] => 
        [Models] => 
        [flag] => 
    )

标签: phparrays

解决方案


切换循环。在外循环中,遍历数据。在内部循环中,遍历属性。

为映射项使用新变量。它可以在循环结束时替换$xkone以修改现有数组。

foreach ($emobile as &$xkone) {
    $car = [];

    foreach ($pst_data as $pstd => $pstd_val) {
        $car[$pstd] = $xkone[$pstd_val] ?? null;
    }

    $xkone = $car;
}

见在线演示


推荐阅读