有没有一种最简单的方法可以将关联数组转换为数字数组,每个项都存储键和值


Is there a minimal way of converting an associative array to a numeric array with each item storing the key and value?

我只需要在PHP中转换:

[
    'id' => '1',
    'code' => 'DRX',
    'company_name' => 'Dave Ricks Ltd'
], 
[
    'id' => '2',
    'code' => 'LRT',
    'company_name' => 'LiveRave Ltd'
]

收件人。。。

[
    [
        [
            'name' => 'id',
            'value' => '1',
        ],
        [
            'name' => 'code',
            'value' => 'DRX',
        ],
        [
            'name' => 'company_name',
            'value' => 'Dave Ricks Ltd',
        ]
    ], 
    [
        [
            'name' => 'id',
            'value' => '2',
        ],
        [
            'name' => 'code',
            'value' => 'LRT',
        ],
        [
            'name' => 'company_name',
            'value' => 'LiveRave Ltd',
        ]
    ]
]

我知道我可以用几个foreach循环来完成这项工作,但我想知道使用一些PHPs数组函数,我是否可以用更少的代码行来完成这一任务?

我假设您的初始数组实际上是

[
  [
    'id' => '1', 'code' => 'DRX', 'company_name' => 'Dave Ricks Ltd'
  ],
  [
    'id' => '2', 'code' => 'LRT', 'company_name' => 'LiveRave Ltd'
  ]
]

因为这是你从数据库中得到的东西。如果我错了,并且您已经发布了数组的实际var_dump/print_r,这很奇怪,但我们可以添加一个步骤来重新组织它。

所以我们需要做的就是

$input = [
    [
        'id' => '1',
        'code' => 'DRX',
        'company_name' => 'Dave Ricks Ltd',
    ], 
    [
        'id' => '2',
        'code' => 'LRT',
        'company_name' => 'LiveRave Ltd',
    ]
];
$output = array_map(function($elem) { 
    return [
        ['name' => 'id', 'value' => $elem['id'] ],
        ['name' => 'code', 'value' => $elem['code'] ],
        ['name' => 'company_name', 'value' => $elem['company_name'] ],
    ];
}, $input);
print_r($output);

如果你想转换更通用:

$output = array_map(function($elem) { 
    $result = [];
    foreach ($elem as $key => $value) {
        $result[] = ['name' => $key, 'value' => $value];
    }
    return $result;
}, $input);
print_r($output);

我在考虑是否有办法去除内侧前臂,但我认为没有值得付出努力的方法。

你可以试试这个:

while ($array) {
    $item = array_shift($array);
    $new_entry = array();
    foreach ($item as $key => $value) {
        $new_item['name'] = $key;
        $new_item['value'] = $value;
        $new_entry[] = $new_item;
    }
    $new_array[] = $new_entry;
}
$final_array = array($new_array);
print_r($final_array);

打印:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [name] => id
                            [value] => 1
                        )
                    [1] => Array
                        (
                            [name] => code
                            [value] => DRX
                        )
                    [2] => Array
                        (
                            [name] => company_name
                            [value] => Dave Ricks Ltd
                        )
                )
            [1] => Array
                (
                    [0] => Array
                        (
                            [name] => id
                            [value] => 2
                        )
                    [1] => Array
                        (
                            [name] => code
                            [value] => LRT
                        )
                    [2] => Array
                        (
                            [name] => company_name
                            [value] => LiveRave Ltd
                        )
                )
        )
)