如何在PHP中检查数组下一个索引的关键字



我有一个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;
}
}
}

相关内容

最新更新