Извлечения значения массива и удалением его


Так что у меня этот массив:

$arr = ('a' => 343, 'b' => 34, 'c' => 65, 'd' => 465);

что также может быть

$arr = ('a' => 343, 'b' => 34, 'c' => 65);

Может следующий код быть улучшена в одну линию?

if(isset($arr['d'])) $something = $arr['d'];
unset($arr['d']);


3747
5
php
задан 25 июня 2011 в 02:06 Источник Поделиться
Комментарии
3 ответа

if(isset($arr['d'])) $something = $arr['d'];
unset($arr['d']);

Ну... если модуль arr['Д'] не установлен, то вы не должны удалить его. Так что это позволит сэкономить ненужный вызов иногда:

if(isset($arr['d']))
{
$something = $arr['d'];
unset($arr['d']);
}

Если вы не заботитесь о $что-то, то вы можете просто сделать

unset($arr['d']);

Который затем одну линию. Вы также можете написать

if (isset($arr['d']) && ($something = $arr['d']) !== null) unset($ar['d']);

Это одна линия, но это не то, что вам нравится если $что-то является нулем. И с точки зрения читабельности это спорно, является ли это улучшение.

2
ответ дан 26 июня 2011 в 08:06 Источник Поделиться

Нет, нет никакого способа, чтобы раздавить его в одну строку и сохранить ее читабельным в любом случае.

$something = isset($arr['d'])
? $arr['d']
: null;
unset($arr['d']);

Это всего лишь незначительное повышение, я знаю, но я думаю, что если вы знакомы с тернарным оператором его немного лучше читается. В конце концов, я не думаю, что есть что-то более оптимизируется.

1
ответ дан 27 июня 2011 в 09:06 Источник Поделиться

Никаких причин, почему вы не можете выпрямить свою собственную функцию для этого, очевидно, что сама функция более чем 1 линию, но сделать это будет намного проще, если вы называете это несколько раз в своем проекте.

function getValue(&$array, $key) {
$value = isset($array[$key]) ? $array[$key] : null;
unset($array[$key]);
return $value;
}

$arr = array('a' => 343, 'b' => 34, 'c' => 65, 'd' => 465);

$val = getValue($arr, 'd');

Если вы вложенностями с двумя переменными, это даст вам

// $val
int 465
// $arr
array
'a' => int 343
'b' => int 34
'c' => int 65

Если ключ не существует переменной$val будет просто нулевым.

0
ответ дан 11 июля 2011 в 12:07 Источник Поделиться