2016-05-08 2 views
1

У меня есть массив чисел 10, 20, 50, 40, 30, 80, 90, 100, 80Удалить п детали после каждого п элементов из массива

Там может быть много чисел, как это возможно. Я хочу сначала отсортировать их в порядке убывания, а затем хочу удалить n количество элементов после каждого n номеров элементов, а затем получить общее количество. Так, например, для. если я хочу, чтобы удалить 2 детали после каждых 3 пунктов из выше массива, то результат должен быть

100, 90, 80, 40, 30, 20 = 360

Я написал код, но он не работает правильно ,

<?php 
function offer($items, $buyItems, $get) { 
$offerType = $buyItems+1; 
$x = $items; 
rsort($x); 
$y = count($x); 

for($i=$y; $i> 0; $i -= $offerType) { 
     $index = $i-1; 


     array_splice($x, $index, 1); 
    } 


$arrlength = count($x); 

for($z = 0; $z < $arrlength; $z++) 
{ 
    echo $x[$z]; 
    echo "\n"; 

} 
echo "Total = " . array_sum($x) . "\n"; 
} 
offer(array(2, 5, 7,16, 6, 8, 40, 90), 2, 1); 
?> 
+0

Можете ли вы пролить свет на то, что означают '$ buyItems' и' $ offerType', и каковы их домены? Код комментария и отступа. – Mati

+0

$ buyitems - это номер, после которого другие n элементов должны быть удалены, а $ get - количество элементов, которые удаляются. $ offertype - это просто переменная, чтобы сделать код соответствующим образом. Я новичок в php, поэтому не был уверен. – user4381753

ответ

1

Я бы сократить отсортированный массив на куски (длина = хорошо + удалить), а затем иметь дело с каждым из них (отрезана и магазин/дисплей).

function offer($items, $buyItems, $get) { 

    rsort($items); 
    $sum = 0; 

    foreach (array_chunk($items, $buyItems + $get) as $group) { 
     foreach (array_slice($group, 0, $buyItems) as $item) { 
      echo $item . "\n"; 
      $sum += $item; 
     } 
    } 

    echo "Total = " . $sum . "\n"; 
} 

КПП. Новая строка "\n" не будет работать в режиме просмотра браузера (только для источника) - вам нужен html <br> для разрывов строк.

+0

wow ... большое спасибо !! отлично работает – user4381753

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