PHP htag от h6 до h1 и получение массива от нуля и выше за один цикл - PullRequest
0 голосов
/ 06 сентября 2018

Я получил этот код здесь:

$aNames = array("Band1","Band2","Band3","Band4","Band5","Band6");

sort($aNames);

for($i = count($aNames); $i > 0; $i-- ) {
        echo "<h" .$i." align='center'>" . $aNames[$i-1] ." Is insane</h".$i.">";
}

это работает.этот код показывает все полосы от h6 до h1 (от малого до большого) и для получения имен из массива от 0 до 5 он использует ту же переменную, но затем ставит -1 после нее.Есть ли кто-нибудь, кто может сказать мне, почему я должен был сделать $ i-1, чтобы он «перевернулся» с 0 до 5?Потому что я не понимаю, как это работает.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Мы знаем, что массивы с нулевым индексом , поэтому при использовании count($aName) возвращается 6 , но в вашем существующем массиве нет ничего похожего на $aName[6], поэтому для доступа значения вашего $aName с этого момента с последнего до первого вы должны использовать $i-1. Надеюсь, это поможет понять это сейчас.

Но с вашим существующим кодом - прежде всего там, где вы использовали цикл for(), вы выполняете некоторый рефакторинг, такой как count($aName) длина массива только один раз, а не в цикле for(), например

$aNames = array("Band1","Band2","Band3","Band4","Band5","Band6");
sort($aNames);
$count = count($aNames); // see the change here
for($i = $count; $i > 0; $i-- ) {
        echo "<h" .$i." align='center'>" . $aNames[$i-1] ." Is insane</h".$i.">";
}

и Вы также можете использовать индексный массив, чтобы избежать $i-1 пути. Просто используйте массив, как этот формат, чтобы отслеживать. Вроде как

$aNames = array(1=>"Band1",2=>"Band2",3=>"Band3",4=>"Band4",5=>"Band5",6=>"Band6");

Помимо вашего существующего решения . Вы можете легко сделать это, используя foreach() без использования какого-либо $i-1. Просто надо krsort() и foreach()

<?php

$aNames = array(1=>"Band1",2=>"Band2",3=>"Band3",4=>"Band4",5=>"Band5",6=>"Band6");
krsort($aNames);
foreach($aNames as $i=>$v){
    echo "<h" .$i." align='center'>" . $aNames[$i] ." Is insane</h".$i.">";
}
0 голосов
/ 06 сентября 2018

Выполнение $i-1 не инвертирует массив. Массивы индексируются нулем, поэтому 0 - это первый элемент. $aNames имеет 6 пунктов, это означает, что вы можете получить значения, используя $aNames[0] ... $aNames[5]

Если вы напишите $aNames[$i] вместо этого, ваш код попытается получить доступ к $aNames[6] на первой итерации, что даст Undefined offset: 6

В этом случае вы хотите, чтобы значение $i для <h1>...<h6> etc и $i-1 для получения правильного индекса для $aNames[0]...$aNames[5].

Обратите внимание, что использование sort в sort($aNames); ничего не меняет для текущих данных, поскольку они уже отсортированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...