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

T
На сайте с 14.08.2009
Offline
42
719

Собственно вопрос, есть у меня например 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.

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

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

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

Обмен трафиком 600% (1-6) (http://tibu.ru/register/247)
palladin_jedi
На сайте с 13.07.2010
Offline
71
#1
taurii:
Найти масив с наибольшим количеством элементов

http://www.php.net/manual/ru/function.count.php

Затем можно создать объединенный ассоциативный массив вида *имя_массива*_ключ => значение.

Далее просто отсортировать массив по ключу.

Как-то так...

Сайт о web-разработке и прочем (http://seazo.net)||Продвижение статьями под Google (http://short.seazo.net/ght4zf) Бесплатные консультации рефералам Sape (http://www.sape.ru/r.SWfwWOblBo.php) PHP и JS скрипты на заказ, создание сайтов с нуля и на CMS.
T
На сайте с 14.08.2009
Offline
42
#2

я так и думал, вот например код

$n=count($mas1); //число елементов в маисе 1

for ($i = 0; $i<$n; $i++) //идем от 0 до последнего елемента
{
echo'$mas1'; // выводим значение
}

таким образом я вывожу теперь ети масивы но только одни за другим, тоесть

все элементы первого масива

все элементы второго масива

....

все элементы пятого масива

а мне нужно сделать что-то наподобие:

$n1=count($mas1); //число елементов в маисе 1

$n2=count($mas2); //число елементов в маисе 2
$n3=count($mas3); //число елементов в маисе 3
$n4=count($mas4); //число елементов в маисе 4
$n5=count($mas5); //число елементов в маисе 5
$allmas=array();
/*
тут дожна быть функцыя которая найдет какое из чисел $n1,$n2,...$n5, является найибольшем
*/

for ($i = 0; $i<(наибольшее число); $i++) //идем от 0 до последнего елемента
{
if ($mas1<>'') $allmas = $allmas+$mas1;
if ($mas2<>'') $allmas = $allmas+$mas2;
if ($mas3<>'') $allmas = $allmas+$mas3;
if ($mas4<>'') $allmas = $allmas+$mas4;
if ($mas5<>'') $allmas = $allmas+$mas5;
}

вот как второй код правильно написать? вот в чем проблема!!!!

Joker-jar
На сайте с 26.08.2010
Offline
171
#3

Решение "в лоб"

$all = array();

$i = 0;

while ( true )
{
$flag = false;
if ( isset($mass1[$i]) ) { $all[] = $mass1[$i]; $flag = true; }
if ( isset($mass2[$i]) ) { $all[] = $mass2[$i]; $flag = true; }
if ( isset($mass3[$i]) ) { $all[] = $mass3[$i]; $flag = true; }
if ( isset($mass4[$i]) ) { $all[] = $mass4[$i]; $flag = true; }
if ( isset($mass5[$i]) ) { $all[] = $mass5[$i]; $flag = true; }
$i++;

if ( ! $flag ) break;
}

print_r($all);
P
На сайте с 03.12.2008
Offline
38
#4

функция с произвольным количеством массивов на входе, если я правильно понял вопрос

<?php

function allarray() {
$ga = func_get_args();
$resA = array();
$i = 0;
$ca = 0;
while(true) {
foreach($ga as $a) {
if(count($a) > $ca)
$ca = count($a);
if( $i < count($a) )
if($a[$i] != "")
$resA[] = $a[$i];
}
$i++;
if($i >= $ca)
break;
}
return $resA;
}

$a = array("", 1);
$b = array(77, 2, 14);
$c = array(600);

print_r(allarray($a, $b, $c));
?>

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий