嗨,我尝试了很多解决方案,但找不到我想要的。我正在从许多其他数组构建一个数组,我可以这样做:
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,因此空合并运算符是一个选项,但我无法完全理解它。这是为了阻止未定义的数组键错误。
提前致谢!
这不是一个完美的例子,因为你必须更改命名,但我认为它足够简短和干净。
$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[$selectoralNation]['regions'][$selectorRegion]['constituencies'][$electoralConstituencyId]++;
} else {
$output[$selectoralNation]['regions'][$selectorRegion]['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;
}