У меня такой вопрос... В общем я php знаю плохо, но мне нужно переделать уже существующую страничку. У меня запрос в базу, в результате чего формируется 2 массива: Код (Text): $array_1[$i] = $row_1['round((avg(kb)),2)'] $array_2[$i] = $row_2['name'] Выглядит это так: [11, 34, 2, 1, 3 ] [Катя, Маша, Ваня, Игорь, Даша] Каждое значение одного массива соответствует значению другого. Мне нужно в первом все значения меньше 10 сложить и вернуть обратно их сумму в массив вместо их самих. Значения во втором массиве, которые соответствуют суммируемым, объединить. На выходе должно быть: [11, 34, 6 ] [Катя, Маша, Остальные] Находились только примеры среза массива и суммы вообще всего, что есть, а мне нужно задать условия для каждого элемента.
Можно сделать ассоциативный массив и с ним работать. Если интересует именно сложить 3 числа, то PHP: //Если там числа $Sum = $arr[2] + $arr[3] + $arr[4]; //Если стороки, то так $Sum = (int)$arr[2] + (int)$arr[3] + (int)$arr[4]; Я бы сделал так, если все по задаче делать: PHP: <?php $array = [11, 34, 2, 1, 3 ]; $out = []; $out2 = 0; foreach( $array as $key => $value ){ if($key <= 1){ array_push($out, $value); } else { $out2 += $value; } } array_push($out, $out2); var_dump($out); Код (Text): array(3) { [0]=> int(11) [1]=> int(34) [2]=> int(6) }
Спасибо, но у меня там больше сотни значений. Не понимаю, как вставить это в мой код, Код (Text): $query="select name,round((avg(kb)),2) from table group by name"; $result=mysql_query($query); $num_result=mysql_num_rows($result); $j=0; for ($i=0; $i <$num_result; $i++) { $row=mysql_fetch_array($result); $array_1[$i]=$row_1['round((avg(kb)),2)']; $sum_1=$array_1[$i]+$sum_1; $array_2[$i]=$row_2['name']; $_SESSION['array_1'][$j]=$array_1[$i]; $_SESSION['array_2'][$i]=$array_2[$i]; $j=$j+1; } $_SESSION['num_result'] =$num_result; Вот где-то в середине нужно вставить что-то типа for i in $array_1[$i] if i <=10 делать сумму и удалять суммируемое значение, а потом за циклом саму сумму как значение приписать через array_push. Сорян, правда не вкуриваю
@sqwerel, где-то в середине проверять - да, надо. Но не надо удалять и прочее... вот, например: PHP: $other_sum = 0; $other_name = 'Остальные'; while(($row = mysql_fetch_assoc($result)) !== false) { if($row_1['round((avg(kb)),2)'] >= 10) { $_SESSION['array_1'][] = $array_1[] = $row_1['round((avg(kb)),2)']; $_SESSION['array_2'][] = $array_2[] = $row_2['name']; } else { $other_sum += $row_1['round((avg(kb)),2)']; } $sum_1 += $row_1['round((avg(kb)),2)']; } if($other_sum > 0) { $_SESSION['array_1'][] = $array_1[] = $other_sum; $_SESSION['array_2'][] = $array_2[] = $other_name; } И не нужны ни i, ни j... Попробуйте заменить строки с 4-й по 14-ю...
Да и тут запись в $_SESSION['array_1'] и _2 надо перенести в завершающую часть (целиком исходные массивы копировать), а в начале - инициализировать массивы $array_1 и _2.
Хм, кое-что работает. Спасибо! Мне массивы эти для графиков нужны были. name-легенда, kb-сами доли на диаграмме. Вот легенда действительно меняется (на other), а деления остались старые (и количество и размер). Вот ещё интересно, для другого случая задали условие $row_1['round((avg(kb)),2)']>=1000000, такой формат уже не воспринимается... то есть предел 10000. Интересно... Ещё раз спасибо.
Вероятно, для них используется ранее вычисленный $num_result. Замените его, например, на итоговую длину массива $array_1.
Всё, как можно было догадаться, программная ошибка сидит в полуметре от монитора. В запросе были проблемы в вычислениях, потому значения одного из массивов шли в 10 раз больше. Сейчас работает как нужно!