Пустые циклы в PHP считаются плохой практикой? - PullRequest
0 голосов
/ 22 октября 2018

В настоящее время я пишу немного кода для сдвига значений ассоциативного массива вправо в PHP 7.0 и использовал цикл for без инструкций:

$array = array("one" => 1, "two" => 2, "three" => 3, "four" => 4);
$first = reset($array);
$last = end($array);

for (end($array); current($array) !== $first && key($array) !== null; $array[key($array)] = prev($array)){
    continue;
}
$array[key($array)] = $last;

Кодработает и выводит то, что мне нужно, но я не могу не чувствовать, что с такой структурой что-то не так.Может быть, есть более понятный способ сделать это?(Я спрашиваю себя об этом прежде всего потому, что мой код не будет поддерживаться мной в будущем, и я хочу, чтобы он был максимально чистым)

Я не смог найти что-либо по теме в руководствестраница или в блогах.Это вообще осуждается или больше зависит от собственного мнения?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Просто предложение о другом подходе, который может быть немного легче для чтения, чем цикл.

// save the keys
$keys = array_keys($array);
// shift the values right
array_unshift($array, array_pop($array));
// restore the keys
$array = array_combine($keys, $array);

Что касается вашей заботы о том, кто будет поддерживать проект в будущем, будь то выили кто-то еще, вы должны попытаться написать код таким образом, чтобы было очевидно, что каждая часть должна делать.Один простой способ сделать это:

function shift_values_right(array $array) {  // code that does that }

Я бы предпочел это, а не пояснительный комментарий, если бы унаследовал проект.

0 голосов
/ 22 октября 2018

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

$array = array("one" => 1, "two" => 2, "three" => 3, "four" => 4);
$first = reset($array);
$last = end($array);

while (current($array) !== $first && key($array) !== null) {
    $array[key($array)] = prev($array);
}

$array[key($array)] = $last;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...