php比较和填充不同长度的数组

时间:2017-04-26 16:32:54

标签: php arrays sorting fill difference

我有两个长度不同的数组,包含mysql表的字段:

data1: Array
(
    [0] => Array
        (
            [field] => dggd
            [type] => int(11)
            [null] => NO
            [key] => 
            [default] => 
            [extra] => 
        )

    [1] => Array
        (
            [field] => id2
            [type] => varchar(255)
            [null] => NO
            [key] => PRI
            [default] => 
            [extra] => 
        )

    [2] => Array
        (
            [field] => qwee
            [type] => int(11)
            [null] => NO
            [key] => 
            [default] => 
            [extra] => 
        )

)
 data2: Array
(
    [0] => Array
        (
            [field] => id2
            [type] => int(11)
            [null] => NO
            [key] => PRI
            [default] => 
            [extra] => auto_increment
        )
)

基本上我想填充具有较少值(具有空记录)的数组以匹配较大数组的长度。此外,我希望索引与['字段']值匹配。

对于上面的示例,我希望转换后的data2如下:

data2: Array
(
    [0] => ''
    [1] => Array
        (
            [field] => id2
            [type] => int(11)
            [null] => NO
            [key] => PRI
            [default] => 
            [extra] => auto_increment
        )
    [2] => ''
)

我的代码搞砸了所有内容,但是如果你想看到它,请转到https://codeshare.io/ald0pY

1 个答案:

答案 0 :(得分:1)

根据'field'中的$data1值创建一个包含空值的模板。

$template = array_fill_keys(array_column($data1, 'field'), '');

按其$data2值重新索引'field',并将其与模板合并。

$data2 = array_merge($template, array_column($data2, null, 'field'));

如果您不想要字符串键,请使用array_values将其转换回数字键。

$data2 = array_values($data2);

此方法确实假设'field'$data2中的$data1的所有值都存在于'field'中。如果它有任何不同的HashMap值,它们将合并到模板的末尾,并且数组的长度不会相同。