Как мне отсортировать ассоциативный массив и разделить на два div на основе значения?

#php #html #associative-array

#php #HTML #ассоциативный массив

Вопрос:

Мне нравится сортировать ассоциативный массив на два div на основе значения.

Вот что у меня есть сейчас:

  function showDivs($array) {
    /*
     * sort en group by
     */
    $luxury = false;
    $no_luxury = false;
    $return = '';
    while (list($key, $value) = each($array)) {

        if ($value["MinimumRate"] < 500) {
            if ($no_luxury === false) {
                $return .= '<div id="no_luxury" >';
            }
            $return .= $value['Description'] . " : " . $value["MinimumRate"] . "<br />";

            if ($no_luxury === false) {
                $return .='</div>';
                $no_luxury = true;
            }
        }

        if ($value["MinimumRate"] > 500) {
            if ($luxury === false) {
                $return .='<div id="luxury" >';
            }
            $return .= $value['Description'] . " : " . $value["MinimumRate"] . "<br />";

            if ($luxury === false) {
                $return .='</div>';
                $luxury = true;
            } 
        } 


    }
    return $return;
}
  

Мой код работает некорректно.

Комментарии:

1. Его текущее неправильное поведение сэкономит всем 3 минуты.

2. если MinimumRate равно 500, то его не будет ни в одном div.

Ответ №1:

Div создается и закрывается только для первого элемента. Я думаю, вы имели в виду открыть его при запуске и закрыть в конце. Попробуйте это:

 function showDivs($array) {
    /*
     * sort en group by
     */

    $luxury = array();
    $not_luxury = array();
    foreach ($array as $value) {
        if ($value["MinimumRate"] > 500) {
            $luxury[] = $value;
        } else {
            $not_luxury[] = $value;
        }
    }

    $return = '<div id="no_luxury" >';

    foreach ($luxury as $value) {
        $return .= $value['Description'] . " : " . $value["MinimumRate"] . "<br />";
    }

    $return .= '</div>';

    $return .= '<div id="luxury" >';

    foreach ($luxury as $value) {
        $return .= $value['Description'] . " : " . $value["MinimumRate"] . "<br />";
    }

    $return .= '</div>';

    return $return;
}
  

Комментарии:

1. Ваша логика обратная: $value["MinimumRate"] < 500 -> $luxury кажется странным определением роскоши

2. Спасибо, МитМаро, хорошая идея использовать массив tenp и хранить значения. Одна маленькая деталь, я заменил ваш первый foreach таким образом, чтобы он читался $not_luxury as $value кстати, как установить ваш ответ в качестве ответа??

3. Приветствую вас, чтобы принять ответ, просто установите флажок под рейтингом ответа.

Ответ №2:

Если проблема в том, что MinimumRate = 500, вы должны сделать:

 if ($value["MinimumRate"] <= 500)    // this is your first 'if' in your code
  

или

 if ($value["MinimumRate"] >= 500)    // this is the second 'if' in your code