2016-03-24 2 views
-1

Мой массив:Объединяет элементы массива, отображение только самое низкое значение

array (size=3) 
    0 => 
    object(stdClass)[20] 
     public 'PkID' => string '488' (length=3) 
     public 'Price' => string '666' (length=3) 
     public 'discount_id' => string '1' (length=1) 
    1 => 
    object(stdClass)[38] 
     public 'PkID' => string '490' (length=3) 
     public 'Price' => string '999' (length=3) 
     public 'discount_id' => string '2' (length=1) 
    2 => 
    object(stdClass)[41] 
     public 'PkID' => string '489' (length=3) 
     public 'Price' => string '111' (length=3) 
     public 'discount_id' => string '1' (length=1) 

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

EDIT: Я пытался

foreach ($array as $value) 
{ 
    $new_array[$value->discount_id] = $value; 
} 

который возвращает сгруппированные массивы, как так:

array (size=2) 
    1 => 
    object(stdClass)[41] 
     public 'PkID' => string '489' (length=3) 
     public 'Price' => string '111' (length=3) 
     public 'discount_id' => string '1' (length=1) 
    2 => 
    object(stdClass)[38] 
     public 'PkID' => string '490' (length=3) 
     public 'Price' => string '999' (length=3) 
     public 'discount_id' => string '2' (length=1) 

Но я не знаю, как вывести наименьшую цену из этих двух сгруппированных элементов (в примере выше это наименьшее, но это только совпадение)

+2

Начните с написания кода. Никто не сделает это за вас. –

+0

Пожалуйста, покажите нам, что вы пробовали. (Некоторый код PHP) –

+0

Являются ли ваши данные из базы данных? Если это так, вы можете сгруппировать его во время SQL-запроса. – Technoh

ответ

0
$new_array = array(); 
foreach ($array as $value) { 
    if (array_key_exists($value->discount_id, $new_array)) { // element with given discount_id already exists 
     if ($new_array[$value->discount_id]->Price > $value->Price) { // existing element has higher price - replace it 
      $new_array[$value->discount_id] = $value; 
     } 
    } else { // add new element 
     $new_array[$value->discount_id] = $value; 
    } 
} 

упрощено:

$new_array = array(); 
foreach ($array as $value) 
    if (!array_key_exists($value->discount_id, $new_array) || $new_array[$value->discount_id]->Price > $value->Price) // no element or existing element has higher price 
     $new_array[$value->discount_id] = $value; 
+0

Спасибо, сэр, что вы отвечаете, но как я могу проверить 'array_key_exists', если' $ new_array' еще не существует –

+0

@ShortPort проверить мое обновление –

Смежные вопросы