Reputation: 643
I have a multidimensional array like this
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'
)
)
How would I change this into a multidimensional array that is standardised so that all the keys were present and a null value entered if the key was not present?
eg.
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'
)
)
Upvotes: 1
Views: 80
Reputation: 164
Try this code
$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);
You get the following result :
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
)
)
Upvotes: 0
Reputation: 26
$array = 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'
));
Upvotes: -1
Reputation: 12085
try this using array key exists function
<?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);
Upvotes: 0
Reputation: 17417
<?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);
Upvotes: 2
Reputation: 3711
You can use php [array_fill][1]
[1]: http://php.net/manual/en/function.array-fill.php function
$arr = array_fill(0, num_of_items_you_need, array(
'A' => null,
'B' => null,
'C' => null
)
);
//now you have null as default
Upvotes: 0
Reputation: 4967
<?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);
Upvotes: 1