индивидуальный заказ и отображение foreach PHP - PullRequest
0 голосов
/ 24 июня 2011

Спасибо многим, кто помогает нам здесь, на Stackoverflow. Вы все классные! Теперь к вопросу. У меня есть массив для следующих значений: "утка", "курица", "яйцо", "свинина", "стейк", "говядина", "рыба", "креветка", "олень" и "баранина" . "

Я получил список для отображения в алфавитном порядке. Это динамический массив, поэтому он не всегда может иметь все эти значения или быть в таком порядке. Я бы хотел, чтобы «Стейк» всегда появлялся первым с «Top Choice» рядом с ним, а остальные оставались в алфавитном порядке с «Доступно для заказа» рядом с ними.

Вот что я получил до сих пор с $ meat_items в качестве массива:

foreach($meat_items as $meat_item)
     echo $meat_item . ' Available for Order <br>';

Я должен уточнить: стейк НЕ всегда может быть частью массива.

Ответы [ 3 ]

3 голосов
/ 24 июня 2011

Поскольку вы всегда хотите, чтобы бифштекс появлялся первым, запишите его жестко:

if (in_array("steak", $meat_items)) {
    `echo "Steak: Top Choice";`
}

Сортировка массива по алфавиту:

sort($meat_items);

Затем переберите массив, повторяя все элементы , кроме стейк:

foreach ($meat_items as $meat_item) {
    if ( "steak" != $meat_item ) {
        echo $meat_item . ' Available for Order<br />';
    }
}
0 голосов
/ 25 июня 2011

Более общий способ сделать это - сообщить PHP, как сортировать элементы, определив сортировку «сравнение», которая предпочитает «топ-выбор», и затем передав ее в usort.

Я действительно не знаю PHP, но что-то вроде:

function prefer_top($a, $b) {
    /* We can modify this array to specify whatever the top choices are. */
    $top_choices = array('Steak');
    /* If one of the two things we're comparing is a top choice and the other isn't,
       then it comes first automatically. Otherwise, we sort them alphabetically. */
    $a_top = in_array($a, $top_choices);
    $b_top = in_array($b, $top_choices);
    if ($a_top && !$b_top) { return -1; }
    if ($b_top && !$a_top) { return 1; }
    if ($a == $b) { return 0; }
    return ($a < $b) ? -1 : 1;
}

usort($meat_items, "prefer_top");

// and then output them all in order as before.
0 голосов
/ 24 июня 2011
if (!empty($meat_items['steak']))
{
    echo 'Steak Top Choice <br >';   
    unset($meat_items['steak']);
}

sort($meat_items);

foreach($meat_items as $meat_item)
     echo $meat_item . ' Available for Order <br>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...