标准化php

时间:2016-05-18 12:05:52

标签: php arrays multidimensional-array

我有像这样的多维数组

Array
(
[0] => Array
    (
        ['key-A'] => 'val1'
        ['key-B'] => 'val2'
    )
[1] => Array
    (
        ['key-A'] => 'val3'
        ['key-C'] => 'val4'
    )
[2] => Array
    (
        ['key-B'] => 'val5'
        ['key-C'] => 'val6'
    )
)

如何将其更改为标准化的多维数组,以便所有键都存在,如果键不存在则输入空值?

例如

Array
(
[0] => Array
    (
        ['key-A'] => 'val1'
        ['key-B'] => 'val2'
        ['key-C'] => null
    )
[1] => Array
    (
        ['key-A'] => 'val3'
        ['key-B'] => null
        ['key-C'] => 'val4'
    )
[2] => Array
    (
        ['key-A'] => null
        ['key-B'] => 'val5'
        ['key-C'] => 'val6'
    )
)

6 个答案:

答案 0 :(得分:2)

<?php
$arrays = [
    [
        'key-A' => 'val1',
        'key-B' => 'val2',
    ],
    [
        'key-A' => 'val3',
        'key-C' => 'val4',
    ],
    [
        'key-B' => 'val5',
        'key-C' => 'val6',
    ],
];

// First build up a single array containing all the keys present
$allKeys = [];

foreach ($arrays as $array)
{
    $allKeys = array_unique(array_merge(array_keys($array), $allKeys));
}

// Then loop over the original array, merging the existing values into an array
// containing all the known keys
foreach ($arrays as &$array)
{
    $array = array_merge(array_combine(
        $allKeys,
        array_fill(0, count($allKeys), null)
    ), $array);
}

print_r($arrays);

答案 1 :(得分:1)

<?php

$input_array = [
    [
        "foo" => 1,
        "bar" => 2
    ],
    [
        "baq" => 3,
        "baz" => 4
    ]
];

$unique = [];

foreach ($input_array as $row){
    foreach ($row as $k => $v){
        $unique[$k] = true;
    }
}

foreach ($input_array as $iak => $row){
    foreach ($unique as $k => $v){
        if (!isset($row[$k])){
            $input_array[$iak][$k] = null;
        }
    }
}

var_dump($input_array);

答案 2 :(得分:0)

你可以使用php [array_fill] [1]

[1]:http://php.net/manual/en/function.array-fill.php功能

$arr = array_fill(0, num_of_items_you_need, array(
           'A' => null,
           'B' => null, 
           'C' => null
          )
       );
//now you have null as default

答案 3 :(得分:0)

尝试使用数组键存在函数

<?php

$ss= Array
 (
'0' => Array
(
    'key-A' => 'val1',
    'key-B' => 'val2'
),
'1' => Array
(
    'key-A' => 'val3',
    'key-C' => 'val4'
),
'2' => Array
(
    'key-B' => 'val5',
    'key-C' => 'val6'
)
);

  print_r($ss);

 foreach($ss as $key=>$row)
  {

 if(!array_key_exists('key-A',$row))
 {

   $ss[$key]['key-A']='null';

 }

if(!array_key_exists('key-B',$row))
 {

   $ss[$key]['key-B']='null';

 }

if(!array_key_exists('key-C',$row))
 {

   $ss[$key]['key-C']='null';

 }



  }

 echo "<PRE>";
 print_r($ss);

答案 4 :(得分:0)

试试此代码

    $ss= Array
 (
'0' => Array
(
    'key-A' => 'val1',
    'key-B' => 'val2'
),
'1' => Array
(
    'key-A' => 'val3',
    'key-C' => 'val4'
),
'2' => Array
(
    'key-B' => 'val5',
    'key-C' => 'val6'
)
);


$key = array("A","B","C");
$var = array();
foreach($ss as $k => $v)
{
    foreach($key as $v2)
    {
        $var[$k]["key-{$v2}"] = isset($v["key-{$v2}"]) ? $v["key-{$v2}"] : "null";
    }
}

print_r($var);

您会得到以下结果:

Array
(
    [0] => Array
        (
            [key-A] => val1
            [key-B] => val2
            [key-C] => null
        )

    [1] => Array
        (
            [key-A] => val3
            [key-B] => null
            [key-C] => val4
        )

    [2] => Array
        (
            [key-A] => null
            [key-B] => val5
            [key-C] => val6
        )

)

答案 5 :(得分:-1)

decode_packet