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

Статус
В этой теме нельзя размещать новые ответы.

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 )
)

Очень надо! Помогите!!
 
один из вариантов использовать слова как индекс нового массива и прибавлять значения
PHP:
$array = Array (
                Array ( 0 => "нолипрен", 1 => 0.5 ),
                Array ( 0 => "Индапамид", 1 => 0.25 ),
                Array ( 0 => "нолипрен", 1 => 0.75 ),
                Array ( 0 => "Периндоприл", 1 => 1 ),
                Array ( 0 => "Пятый препарат", 1 => 1 )
); 

$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);
}
 
а откуда такой массив берется? случайно не с БД какой-то?
 
Массив берется из БД.
 
один из вариантов использовать слова как индекс нового массива и прибавлять значения
PHP код:
$array = Array (
Array ( 0 => "нолипрен", 1 => 0.5 ),
Array ( 0 => "Индапамид", 1 => 0.25 ),
Array ( 0 => "нолипрен", 1 => 0.75 ),
Array ( 0 => "Периндоприл", 1 => 1 ),
Array ( 0 => "Пятый препарат", 1 => 1 )
);

$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);
}


а как сделать если вместо сложения будет деление?
 
PHP:
$array = Array (
                Array ( 0 => "нолипрен", 1 => 0.5 ),
                Array ( 0 => "Индапамид", 1 => 0.25 ),
                Array ( 0 => "нолипрен", 1 => 0.75 ),
                Array ( 0 => "Периндоприл", 1 => 1 ),
                Array ( 0 => "Пятый препарат", 1 => 1 )
); 

$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);
}
 
мне показалось что вторая постановка задачи лишена смысла. если нужно будет только складывать товары с группировкой, то нужно использовать возможности БД, например так как это написано в посте chang, а не извращаться с массивами на пхп.
 
PHP:
$array = Array (
                Array ( 0 => "нолипрен", 1 => 0.5 ),
                Array ( 0 => "Индапамид", 1 => 0.25 ),
                Array ( 0 => "нолипрен", 1 => 0.75 ),
                Array ( 0 => "Периндоприл", 1 => 1 ),
                Array ( 0 => "Пятый препарат", 1 => 1 )
); 
$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);
}
Спасибо!
А если еще учесть что если 0 делиться на число то выводить не число а 0....
 
если ноль делить на число то ноль и получится, но не ясно что делать если попадётся ноль, тогда на ноль делить нельзя поэтому приравнял элемент нулю
PHP:
$array = Array (
                Array ( 0 => "нолипрен", 1 => 0.5 ),
                Array ( 0 => "Индапамид", 1 => 0.25 ),
                Array ( 0 => "нолипрен", 1 => 0.75 ),
                Array ( 0 => "Периндоприл", 1 => 1 ),
                Array ( 0 => "Пятый препарат", 1 => 1 ),
                Array ( 0 => "нолипрен", 1 => 0 ),
                Array ( 0 => "нолипрен", 1 => 0.2 )
); 

$new_array = array();
$count_array = array();
foreach($array as $item){
    //количество елементов
    $count_array[$item[0]]++;
    //если первый элемент или значение равно нулю то присваеваем значение
    if($count_array[$item[0]]<2 || $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);
}
получается если ноль попадётся то дальше уже не важно какие числа всё равно ноль будет
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху