从数组构建数组时:IF array key is SET, INCREMENT else SET to 1

问题描述 投票:0回答: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,因此空合并运算符是一个选项,但我无法完全理解它。这是为了阻止未定义的数组键错误。

提前致谢!

php arrays isset undefined-index
1个回答
0
投票

这不是一个完美的例子,因为你必须更改命名,但我认为它足够简短和干净。

$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;
}
© www.soinside.com 2019 - 2024. All rights reserved.