提问人:Ben 提问时间:3/24/2023 最后编辑:Ben 更新时间:3/27/2023 访问量:47
从数组构建数组时:IF var 为 SET,INCREMENT else SET 为 1
When building an array from an array: IF var is SET, INCREMENT else SET to 1
问:
嗨,我尝试了很多解决方案,但找不到我想要的东西。我正在从许多其他数组构建一个数组,我可以做这样的事情:
isset($setinc) ? $setinc++ : $setinc=1;
但是,当 var 为:
$output[ $data[ 'electoral_nation' ] ][ 'regions' ][ $data[ 'electoral_region' ] ][ 'constituencies' ][ $data[ 'electoral_constituency_id' ] ][ 'national_candidates' ]
当有超过 600 个比较和循环时,一切都变得非常混乱,有没有办法简化它而不是这个?
isset($output[ $data[ 'electoral_nation' ] ][ 'regions' ][ $data[ 'electoral_region' ] ][ 'constituencies' ][ $data[ 'electoral_constituency_id' ] ][ 'national_candidates' ]) ? $output[ $data[ 'electoral_nation' ] ][ 'regions' ][ $data[ 'electoral_region' ] ][ 'constituencies' ][ $data[ 'electoral_constituency_id' ] ][ 'national_candidates' ]++ : $output[ $data[ 'electoral_nation' ] ][ 'regions' ][ $data[ 'electoral_region' ] ][ 'constituencies' ][ $data[ 'electoral_constituency_id' ] ][ 'national_candidates' ]=1;
我正在运行 PHP8,因此 null 合并运算符是一个选项,但无法完全理解它。这是为了停止未定义的数组键错误。
提前致谢!
编辑:好的,所以上面的一些内容似乎让人分心。因此,要澄清。有没有办法写以下内容,但只声明一次$setinc
isset($setinc) ? $setinc++ : $setinc=1;
即
isset($setinc) ? += 1 : == 1;
答:
0赞
JC Cavalca
3/24/2023
#1
这不是一个完美的例子,因为你必须改变命名,但我认为它足够简短和干净。 最后一件事,您必须检查“选区”中的关键$electoralConstituencyId是否存在其他情况。在这个例子中,我不这样做。
$electoralNation = $data[ 'electoral_nation' ] ?? null;
$electoralRegion = $data[ 'electoral_region' ] ?? null;
$dataElectoralConstituencyId = $data[ 'electoral_constituency_id' ?? null;
if (null === $electoralNation || null === $electoralRegion || null === $dataElectoralConstituencyId) {
throw exception;
}
$keysInRightOrder = [$electoralNation, 'regions', $electoralRegion, 'constituencies', $electoralConstituencyId];
if ($this->arrayKeysInOrderExists($keysInRightOrder, $output)) {
$output[$electoralNation]['regions'][$electorRegion]['constituencies'][$electoralConstituencyId]++;
} else {
$output[$electoralNation]['regions'][$electorRegion]['constituencies'][$electoralConstituencyId] = 1;
}
public function arrayKeysInOrderExists(array $keys, array $array): bool
{
foreach ($keys as $key) {
if (array_key_exists($key, $array)) {
$array = $array[$key];
} else {
return false;
}
}
return true;
}
评论