html — двумерный массив php с суммами в таблице
вывод должен быть таким, где «SUM» не является частью массива.
| 1st key2 | 2nd key2 | 3rd key2 | SUM 1st key1 | 10 | 10 | 10 | 30 2nd key1 | 10 | 10 | 10 | 30 3rd key1 | 10 | 10 | 10 | 30 SUM | 30 | 30 | 30 | 90
поэтому я начинаю вывод, чтобы увидеть, как далеко я доберусь:
echo ''; foreach($arr as $linekey => $line) < echo ''; echo ''; echo ' '; foreach($line as $key => $value) < echo ''; echo $key; echo ' '; > echo ''; echo 'SUM'; //adding the SUM column echo ' '; echo ' '; break; > echo ''; foreach($arr as $key1 => $value1) < echo ''; echo''.$key1.' '; $sumRow = 0; //reset sumRow foreach($arr[$key1] as $key2 => $value2) < echo''.round($arr[$key1][$key2],0).' '; $sumRow += $arr[$key1][$key2]; //summing up rows $sumAll += $arr[$key1][$key2]; //summing up everything $sumCol += $arr[$key1][$key2]; //where should be this? > echo''.round($sumRow,0).' '; //echo $sumRow echo ' '; > echo '
';
это работает, но я не уверен, где суммировать столбцы
Решение
Вы должны использовать массив $sumCol собирать суммы столбцов:
Размер должен быть как количество столбцов.
Вы не можете сделать это в одном цикле без массива, потому что вы перебираете индекс столбцов внутри, так что вы можете собрать только sumRow в одной временной переменной (без массива).
echo 'SUM '; foreach($sumCol as $key2 => $value2) < echo''.round($sumCol[$key2],0).' '; //echo $sumCol > echo ' '; echo '';
Другой способ — определить второй цикл, в котором вы сначала выполняете итерации по столбцам, а затем — по строкам.
Другие решения
Создать таблицу из двумерного массива php
[1] => Array(
[0] => :LogBot
[1] => 2
[2] => 1
[3] => Фамилия
[4] => Имя
[5] => Отчество
[6] => программист
[7] => :+38097955637
[8] => 2
[9] => Фамилия
[10] => Имя
[11] => Отчество
[12] => консультант
[13] => +38097558637
)
И нужно из такого массива сформировать таблицу по типу как на картинке О_о (скрин приложу)
Загвоздка в том, что у подмассивов разный размер!!
Если кто знает как это сделать поделитесь инфой пожалуйста ))
Получить таблицу умножения в виде двумерного массива
здравствуйте, помогите, очень срочно надо решить задачки, не могу получить зачет, заранее.
Как добавить в таблицу dataGridView элементы двумерного массива
Как добавить в таблицу dataGridView элементы, т.е из массива двумерного сформировать таблицу .
Формирование двумерного массива через функцию и последующий его вывод в таблицу
Друзья, возникла проблема, необходимо вывести двумерный массив в таблицу и посчитать строку с.
Данные о ценах в М магазинах для N видов товара хранятся в виде двумерного массива. Сформировать таблицу
вот код,но выскакивает ошибка Run-Time Check Failure #3 — The variable ‘i’ is being used without.
В том и суть, что в первом подмассиве 8 элементов, а во тором 14. Но в итоге дожна получится таблица как на скрине.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
$arr =[ ["Триалан",1,1,"Фамилия","Имя","Отчество","Программист","+3434355"], ["ббббббб",1,"Фамилия","Имя","Отчество","Программист","+3434355","dwdwdw",1,"Фамилия","Имя","Отчество","Программист","+3434355"] ]; $chunk= array_chunk($arr[1],7);//разбиваем 2 массив по 7 элементов unset($arr[1]); $a = array_merge($arr,$chunk); echo ""; for($i=0;$icount($a);$i++){ echo "
";"; for($j=0;$jcount($a,COUNT_RECURSIVE);$j++){ if($j>=7) continue; echo " "; } echo "".$a[$i][$j]." "; } echo "
Сообщение от Takumi93
а должно быть 16 , что бы можно было разбить по 8. и получить как в 1 массиве. Ибо тогда таблица не сходится. в 1 массиве 8 элеменов во 2 и 3 по 7.
А , не заметил у вас потом 2 строки пропущены.
for($i=0,$cnt=count($array);$i$cnt;$i++) { echo ''; if(isset($array[$i])) { echo $array[$index]; } echo ' '; }
Сообщение было отмечено Takumi93 как решение
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
$arr = array( 0 => array( 0 => 'Триалан', 1 => 1, 2 => 1, 3 => 'Фамилия', 4 => 'Имя', 5 => 'Отчество', 6 => 'программист', 7 => '+380979818637', ), 1 => array( 0 => ':LogBot', 1 => 2, 2 => 1, 3 => 'Фамилия', 4 => 'Имя', 5 => 'Отчество', 6 => 'программист', 7 => '+38097955637', 8 => 2, 9 => 'Фамилия', 10 => 'Имя', 11 => 'Отчество', 12 => 'консультант', 13 => '+38097558637', ) ); echo ''; foreach ($arr as $row) { echo '
';'; $num = (count($row) - 2) / 6; for ($i = 0; $i $num; ++$i) { echo ' Количество участников Фамилия Имя Отчество Должность Номер телефона '; echo ' '; } } echo '' . ($row[2+6*$i] == 1 ? $row[0] : '') . ' '; echo '' . ($row[2+6*$i] == 1 ? $row[1+6*$i] : '') . ' '; for ($j = 3; $j 8; ++$j) { echo '' . $row[$j+6*$i] . ' '; } echo '
И еще вопрос, а как добавить чтобы еще выводился номер пользователя ?
array( ['var1'] => Триалан ['num1'] => 1 ['num2'] => 1 ['name3'] => Фамилия ['name1'] => Имя ['name2'] => Отчество ['prof'] => программист ['phone'] => +380979818637 );
Сообщение от Takumi93
Сообщение от полудух
Сообщение от полудух
Сообщение от полудух
$a = [1,2,3,4,5]; //список $a = ["name"=>"Вася","age"=>12]; //ассоциативный $a = ["name"=>"Вася",2,3,"age"=>12]; //смешанный
Если я не ошибаюсь, когда читал на Хабре как устроены массивы в php, там так же говорилось о списках,ассоциативных и смешанных.
p.S. Возможно я не прав, переубедите меня.
что это за бред, вы хоть задумайтесь
На самом деле массив в PHP — это упорядоченное отображение, которое устанавливает соответствие между значением и ключом. Этот тип оптимизирован в нескольких направлениях, поэтому вы можете использовать его как собственно массив, список (вектор), хэш-таблицу (являющуюся реализацией карты), словарь, коллекцию, стек, очередь и, возможно, что-то еще. Так как значением массива может быть другой массив PHP, можно также создавать деревья и многомерные массивы.
так вот цифры не делают массив «списком»
каждая цифра это ключ, который содержит значение
ключ=>значение
всегда.
И не важно, что этот ключ = цифра, она ключ, без которого значение не получить.
вы всегда обращаетесь к элементу массива через его ключ, какие нафиг списки?
сможете найти пример в ПХП, где эта парадигма отсутствует? тогда его и обсудим.
А если хотите увидеть тру списки, то сходите в REDIS, там их есть. Они выглядят как списки — без всяких индексов, и работают как списки — их можно сортировать, считать, добавлять в начало/конец, подрезать список.
Но нельзя вытащить по ключу значение! Там нет ключей.
> lrange hashes:14 0 -1 1) "keys:P8c3ZyjT61pAaD5dpy3cBG812Zo46l7W:1295183380" 2) "keys:1IQiCmTq5l5ai7WY7klFxDXRyUTG7Rj9:1295183380"
ключевая разница между списком и массивом: в списке вы выводите № нужной строки, а в массиве — значение по ключу.
Попробуйте найти эту разницу в ПХП.
В ПХП можно создать такой массив вообще:
В списке должны были бы быть упорядоченные строки — 0,1
Кстати, в перле только визуальное разделение (нафиг не нужное), там обычный массив выглядит так: @array, а хэш так: %hash
а на деле — все обращения по ключу и многомерность там через жопу.
А вот в пхп нету этих разделений, там все массивы имеют ключ=>значение и они бесконечно многомерные (в разумных пределах)
и ему так откровенно лучше.
Добавлено через 1 минуту
Сообщение от Azdeman
PHP: Многомерные массивы
Массив не обязательно должен представлять из себя простой список ключей и простых значений. Каждый элемент массива может содержать в качестве значения другой массив, который в свою очередь может тоже содержать массив и так далее. Таким образом можно создавать двумерные и трехмерные массивы.
Двумерные массивы
Двумерный массив — массив, который в качестве значений хранит в себе другие массивы. Рассмотрим создание двумерного массива с помощью конструктора array() :
$flowers = array( array("розы", 100 , 15), array("тюльпаны", 60 , 25), array("орхидеи", 180 , 7) );
Массив $flowers содержит три массива. Как вы помните, для доступа к элементам одномерного массива надо указывать имя массива и ключ. То же самое верно и в отношении двумерных массивов, с одним исключением: каждый элемент имеет два ключа: первый для выбора строки, второй для выбора столбца.
Чтобы вывести элементы этого массива можно вручную прописать доступ к каждому из них, но лучше воспользоваться вложенными циклами:
Вместо номеров столбцов (индексы, присвоенные им по умолчанию) можно задавать им нужные ключи. Для этой цели используются ассоциативные массивы. Следующий массив будет хранить те же данные, но уже с использованием ключей для именования столбцов с информацией:
$flowers = array( array( "Название" => "розы", "Цена" => 100, "Количество" => 15 ), array( "Название" => "тюльпаны", "Цена" => 60, "Количество" => 25, ), array( "Название" => "орхидеи", "Цена" => 180, "Количество" => 7 ) );
Ключи создают дополнительное удобство для работы с массивом в тех случаях, когда нужно получить одно из значений. Необходимые данные можно легко найти, если обратиться к правильной ячейке, используя значимые имена строки и столбца. Однако при этом мы теряем возможность последовательно обхода массива с помощью цикла for .
Мы можем перебрать с помощью цикла for только дочерние массивы. Так как они, в свою очередь, являются ассоциативными, то для перебора их элементов нужно воспользоваться циклом foreach , или перебрать элементы вручную:
Необязательно использовать для создания двумерного массива конструктор array() , можно воспользоваться и коротким синтаксисом — квадратными скобками:
$flowers = [ [ "Название" => "розы", "Цена" => 100, "Количество" => 15 ], [ "Название" => "тюльпаны", "Цена" => 60, "Количество" => 25, ], [ "Название" => "орхидеи", "Цена" => 180, "Количество" => 7 ] ];
Трёхмерные массивы
Не обязательно ограничиваться только двумя измерениями: так же, как элементы массива могут содержать массивы, эти массивы, в свою очередь, могут содержать новые массивы.
Трёхмерный массив характеризует ширину, высоту и глубину. Если представлять двумерный массив в виде таблицы, то трёхмерный добавляет к этой таблице слои. Каждый элемент такого массива будет ссылаться на слой, строку и столбец.
Если немного модифицировать наш массив с цветами, то можно переделать его в трёхмерный. В коде, представленном ниже видно, что трёхмерный массив — массив, содержащий массив массивов:
$flowers = [ [ ["розы", 100 , 15], ["тюльпаны", 60 , 25], ["орхидеи", 180 , 7] ], [ ["розы", 100 , 15], ["тюльпаны", 60 , 25], ["орхидеи", 180 , 7], ], [ ["розы", 100 , 15], ["тюльпаны", 60 , 25], ["орхидеи", 180 , 7] ] ];
Поскольку этот массив содержит только числовые индексы, мы можем использовать для его отображения вложенные циклы:
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011 – 2023 © puzzleweb.ru