Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Сортировка нескольких масивов

#1 arashvg

arashvg
  • Пользователь
  • 6 сообщений
  • Репутация: 0
0

Отправлено 10 Февраль 2012 - 12:59

Собственно вопрос, есть у меня например 5 разных масивов, которые содержат каждый разное количество элементов, сколько их в каждом масиве мне неизвестно, так как они формируются динамически в зависимости от входящих данных.
например в одном из случаев получается такая картина

$mas1 содержит 8 элементов
$mas2 содержит 2 элемента
$mas3 содержит 5 элементов
$mas4 содержит 0 элементов
$mas5 содержит 12 элементов

Моя задача отобразить все элементы масивов в таком порядке:
$mas1 элемент 1
$mas2 элемент 1
$mas3 элемент 1
$mas4 элемент 1
$mas5 элемент 1
$mas1 элемент 2
$mas2 элемент 2
$mas3 элемент 2
$mas4 элемент 2
$mas5 элемент 2
.....

каким образом это можно реализовать?
_______

как думал это сделать я:
1. Найти масив с наибольшим количеством элементов (как это сделать ума не приложу :)).
2. В создать новый масив ($allmas) цыкле начиная с 0 до числа найденного в первом пункте выполнять следующие действия:
если $mas1 элемент i<>'' добавить этот элемент к $allmas
если $mas2 элемент i<>'' добавить этот элемент к $allmas
.....
если $mas5 элемент i<>'' добавить этот элемент к $allmas
выходим из цикла, выводим масив $allmas.

Но как это сделать программно?

Дело в том что пхп только начал изучать и знаю его на уровне двойки с огромным минусом... если бы например на делфи нужно было такое написать, проблем бы невозникло ), а на ПХП, увы!!!

Помогите пожалуйста!

 

 

  • 0

#2 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 10 Февраль 2012 - 18:38

Насколько я понял задачу... хотя уверен, что на этапе формирования массивов, она должна решаться проще:
<?php
$count = 3; // количество массивов
$max = 8; // кол-во элементов в самом большом массиве... получаем на этапе формирования массива
$arr1 = array(1,2,3,4,5,6,7,8);
$arr2 = array(9,10);
$arr3 = array(11,12,13,14,15);
$res = array(0 => $arr1, 1 => $arr2, 2 => $arr3); // итоговый массив
/* Логика вывода элементов итогового массива
00 | 10 | 20
01 | 11 | 21
02 | 12 | 22
03 |	| 23
*/
echo '<pre>';
print_r($res);
echo '</pre>';
for($i = 0; $i < $max; $i++){
  for($j = 0; $j < $count; $j++){
   if(!empty($res[$j][$i]))
   echo "Элемент $i: <b>" . $res[$j][$i].'</b><br>';
  }
echo '<hr>';
}
?>

  • 0


#3 unfixed

unfixed
  • Пользователь
  • 21 сообщений
  • Репутация: 5

Отправлено 10 Февраль 2012 - 19:50

Вот еще вариант:

<?php
				// Данные массивы
				$arr0 = array('zero.zero', 'zero.one', 'zero.two', 'zero.three');
				$arr1 = array('one.zero', 'one.one');
				$arr2 = array('two.zero');

				// Общий массив
				$array = array($arr0, $arr1, $arr2);

				// Определение наибольшего элемента в данных массивах
				$max = 0;
				for ($i = 0; $i < count($array); $i++) {
						if (count($array[$i]) >= $max) $max = count($array[$i]);
				}

				// Вывод
				for ($i = 0; $i < $max; $i++) {
						echo 'Итерация №'.$i.'<br />'; // Для наглядности при выводе
						for ($j = 0; $j < count($array); $j++) {
								if ($array[$j][$i]) echo $array[$j][$i].'<br />';
						}
				}
?>

В итоге выводит:

Итерация №0
zero.zero
one.zero
two.zero
Итерация №1
zero.one
one.one
Итерация №2
zero.two
Итерация №3
zero.three


  • 0


Оформление форума – IPBSkins.ru