我有一个PHP数组:
$datas = array(
"abcd" => array(
"1639340364" => 1,
"1639362752" => 85,
"1639363500" => 74,
),
"efgh" => array(
"1639340364" => 78,
"1639362754" => 98,
"1639363500" => 46,
),
"ijkl" => array(
"1639340364" => 78,
"1639362754" => 98,
"1639363505" => 46,
),
);
我想检查每个数组的键,如果不匹配,需要将其添加到每个数组上。
期望输出类似:
$datas = array(
"abcd" => array(
"1639340364" => 1,
"1639362752" => 85,
"1639362754" => 0,
"1639363500" => 74,
"1639363505" => 0,
),
"efgh" => array(
"1639340364" => 78,
"1639362752" => 0,
"1639362754" => 98,
"1639363500" => 46,
"1639363505" => 0,
),
"ijkl" => array(
"1639340364" => 78,
"1639362752" => 0,
"1639362754" => 98,
"1639363500" => 0,
"1639363505" => 46,
),
);
如果密钥不存在,则需要添加值为零的密钥。这可能吗?
我尝试使用array_key_exists((函数。。。但我不确定我要在哪里检查,当我检查时,它的返回为true(1(。我知道它在检查同一个数组,实际上我想知道在哪里检查条件?
foreach($datas as $key => $data ){
print_r($data);
foreach($data as $key => $point ){
$val = array_key_exists($key,$data);
echo $val;
}
}
我想到了这个:
// prepare default keys
$keys = [];
foreach ($datas as $data) {
$keys = array_merge($keys, array_keys($data));
}
$keys = array_unique($keys);
sort($keys);
// construct default array with zeros
$default = array_combine($keys, array_fill(0, count($keys), 0));
// insert the default array
foreach ($datas as $key => $data) {
$datas[$key] = array_replace($default, $data);
}
// show result
echo '<pre>';
print_r($datas);
echo '</pre>';
我需要使用过多的数组函数。其想法是:首先,我从数组中收集所有可能的"键",使它们唯一,对它们进行排序,并将它们组合成一个只包含零值的新"默认"数组。之后,我使用array_replacement((函数将此数组插入到现有的$datas
数组中。这个功能正是你想要的:
array_replacement((用具有以下每个数组中的相同键。如果第一个数组存在于第二个数组中,其值将被值。
它不漂亮,也不优化,但现在开始:
$subkeys = array();
foreach ($datas as $k => $d) {
foreach($d as $k2 => $d2) {
$subkeys[$k2] = 0;
}
}
foreach ($datas as $k => &$d) {
foreach ($subkeys as $xk => $xd) {
if ( ! array_key_exists($xk, $d)) {
$d[$xk] = $xd;
}
}
}