检查变量是否设置并分配其值或设置默认值的最有效方法是什么?

时间:2015-10-05 06:15:13

标签: php arrays multidimensional-array

我有一个很长的多维数组值,可能存在也可能不存在。

检查设置,使用其值或以其他方式使用替代值而不重复对多维数组的引用的最有效方法是什么?

在这里你可以看到长数组被引用了两次,可以避免吗?

$source = null;
$default = 'something';
if(isset($request['controller']['options']['data']['source'])) {
    $source = $request['controller']['options']['data']['source'];
} else {
    $source = $default;
}

5 个答案:

答案 0 :(得分:1)

$source = null;
$default = 'something';
if(isset($request['controller']['options']['data']['source']) && $request['controller']['options']['data']['source']) {
    $source = $request['controller']['options']['data']['source'];
} else {
    $source = $default;
}

答案 1 :(得分:0)

如果你不想像我在评论中所说的那样做,或者你想避免你在做什么,还有另一种方法。

(isset($request['controller']['options']['data']['source'])) ? $source = $request['controller']['options']['data']['source']
        : ($source = $default);

答案 2 :(得分:0)

$your_variable = $request['controller']['options']['data']['source'];
如果任何密钥不存在,

将导致警告。所以不行。我认为最好的方法是创建一个帮助方法来实现技巧

<?php
/**
 * Retrieve value from a multi dimensional array or default if key not exists
 *
 * @param array $input
 * @param array $key_list
 * @param mixed $default
 * @return mixed
 */
function mda_helper(array $input, array $key_list, $default) {
    foreach ($key_list as $key) {
        if (!array_key_exists($key, $input)) {
            return $default;
        }

        $input = $input[$key];
    }

    return $input;
}

$request = [
    'controller' => [
        'options' => [
            'data' => [
                //'source' => 'foo'
            ]
        ]
    ]
];

$default = 'something';

$source = mda_helper($request, ['controller', 'options', 'data', 'source'], $default);

答案 3 :(得分:0)

从PHP 7开始,使用"null coalesce" (a.k.a. "isset ternary") operator

$source = ($request['controller']['options']['data']['source'] ?? $default)

答案 4 :(得分:-1)

jQuery