Убрать и сложить значения в массиве

Тема в разделе "PHP", создана пользователем avantus, 24 май 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. avantus

    avantus Постоялец

    Регистр.:
    24 июл 2009
    Сообщения:
    64
    Симпатии:
    0
    Здравствуйте! Помогите пожалуйста! Есть массив:
    Array (
    [0] => Array ( [0] => нолипрен [1] => 0.5 )
    [1] => Array ( [0] => Индапамид [1] => 0.25 )
    [2] => Array ( [0] => нолипрен [1] => 0.75 )
    [3] => Array ( [0] => Периндоприл [1] => 1 )
    [4] => Array ( [0] => Пятый препарат [1] => 1 )
    )

    Требуется удалить повторяющееся значения одного аргумента сложив при этом значения другого аргумента(в данном случае оставить одно название нолипрен сложив 0.5 и 0.75). То есть надо чтоб получился массив:
    Array (
    [0] => Array ( [0] => нолипрен [1] => 1.25 )
    [1] => Array ( [0] => Индапамид [1] => 0.25 )
    [2] => Array ( [0] => Периндоприл [1] => 1 )
    [3] => Array ( [0] => Пятый препарат [1] => 1 )
    )

    Очень надо! Помогите!!
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    один из вариантов использовать слова как индекс нового массива и прибавлять значения
    PHP:
    $array = Array (
                    Array ( 
    => "нолипрен"=> 0.5 ),
                    Array ( 
    => "Индапамид"=> 0.25 ),
                    Array ( 
    => "нолипрен"=> 0.75 ),
                    Array ( 
    => "Периндоприл"=> ),
                    Array ( 
    => "Пятый препарат"=> )
    ); 

    $new_array = array();
    foreach(
    $array as $item){
        
    $new_array[$item[0]] += $item[1];
    }

    $end = array();
    foreach(
    $new_array as $key=>$value){
        
    $end[] = array($key$value);
    }
     
    avantus нравится это.
  3. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    363
    Симпатии:
    117
    а откуда такой массив берется? случайно не с БД какой-то?
     
  4. avantus

    avantus Постоялец

    Регистр.:
    24 июл 2009
    Сообщения:
    64
    Симпатии:
    0
    Массив берется из БД.
     
  5. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    363
    Симпатии:
    117
    ну тогда более верным решением будет изменить SQL запрос выбирающий данный массив...
    PHP:
    SELECT namesumprice 
       
    FROM `qwe
    GROUP BY `name`
     
  6. avantus

    avantus Постоялец

    Регистр.:
    24 июл 2009
    Сообщения:
    64
    Симпатии:
    0

    а как сделать если вместо сложения будет деление?
     
  7. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    PHP:
    $array = Array (
                    Array ( 
    => "нолипрен"=> 0.5 ),
                    Array ( 
    => "Индапамид"=> 0.25 ),
                    Array ( 
    => "нолипрен"=> 0.75 ),
                    Array ( 
    => "Периндоприл"=> ),
                    Array ( 
    => "Пятый препарат"=> )
    ); 

    $new_array = array();
    foreach(
    $array as $item){
        
    //$new_array[$item[0]] += $item[1];
        //если ноль то присваиваем значение
        
    if($new_array[$item[0]]<=0){
            
    $new_array[$item[0]] = $item[1];
        }else{
            
    //если нет то делим старый/новый
            
    $new_array[$item[0]] /= $item[1];
        }
    }

    $end = array();
    foreach(
    $new_array as $key=>$value){
        
    $end[] = array($key$value);
    }
     
  8. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    мне показалось что вторая постановка задачи лишена смысла. если нужно будет только складывать товары с группировкой, то нужно использовать возможности БД, например так как это написано в посте chang, а не извращаться с массивами на пхп.
     
  9. avantus

    avantus Постоялец

    Регистр.:
    24 июл 2009
    Сообщения:
    64
    Симпатии:
    0
    Спасибо!
    А если еще учесть что если 0 делиться на число то выводить не число а 0....
     
  10. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    если ноль делить на число то ноль и получится, но не ясно что делать если попадётся ноль, тогда на ноль делить нельзя поэтому приравнял элемент нулю
    PHP:
    $array = Array (
                    Array ( 
    => "нолипрен"=> 0.5 ),
                    Array ( 
    => "Индапамид"=> 0.25 ),
                    Array ( 
    => "нолипрен"=> 0.75 ),
                    Array ( 
    => "Периндоприл"=> ),
                    Array ( 
    => "Пятый препарат"=> ),
                    Array ( 
    => "нолипрен"=> ),
                    Array ( 
    => "нолипрен"=> 0.2 )
    ); 

    $new_array = array();
    $count_array = array();
    foreach(
    $array as $item){
        
    //количество елементов
        
    $count_array[$item[0]]++;
        
    //если первый элемент или значение равно нулю то присваеваем значение
        
    if($count_array[$item[0]]<|| $item[1]==0){
            
    $new_array[$item[0]] = $item[1];
        
    //если нет то делим старый/новый
        
    }else{
            
    $new_array[$item[0]] /= $item[1];
        }
    }

    $end = array();
    foreach(
    $new_array as $key=>$value){
        
    $end[] = array($key$value);
    }
    получается если ноль попадётся то дальше уже не важно какие числа всё равно ноль будет
     
Статус темы:
Закрыта.