Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2012, 13:53   #1
taurii
Пользователь
 
Регистрация: 05.07.2011
Сообщений: 24
По умолчанию Сортировка нескольких масивов

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

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

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

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

Последний раз редактировалось taurii; 10.02.2012 в 13:56.
taurii вне форума Ответить с цитированием
Старый 10.02.2012, 15:14   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Например так
Код:
<?
function modifyArray(&$array, $index) {
  foreach ($array as $key => $value) {
    $array[$key] = array("array" => $index, "key" => $key, "value" => $value);
  }
}

function mySort($a, $b) {
  if ($a["key"] == $b["key"]) {
    return $a["array"] < $b["array"] ? -1 : $a["array"] == $b["array"] ? 0 : 1; 
  }
  else
    return $a["key"] < $b["key"] ? -1 : 1;
} 

$mas1 = array(5, 4, 2, 6, 8, 23, 25);
$mas2 = array(3, 6, 7, 2);
$mas3 = array(3, 8, 2, 7, 4, 7);
$mas4 = array();
$mas5 = array(1, 2, 94, 5, 34);

modifyArray($mas1, 1);
modifyArray($mas2, 2);
modifyArray($mas3, 3);
modifyArray($mas4, 4);
modifyArray($mas5, 5);

$merge = array_merge($mas1, $mas2, $mas3, $mas4, $mas5);
usort($merge, "mySort");

foreach ($merge as $m) {
  echo $m["array"]." => ".$m["value"]."<br />";
}
?>
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 10.02.2012, 16:48   #3
taurii
Пользователь
 
Регистрация: 05.07.2011
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Greblin Посмотреть сообщение
Например так
Код:
<?
function modifyArray(&$array, $index) {
  foreach ($array as $key => $value) {
    $array[$key] = array("array" => $index, "key" => $key, "value" => $value);
  }
}

function mySort($a, $b) {
  if ($a["key"] == $b["key"]) {
    return $a["array"] < $b["array"] ? -1 : $a["array"] == $b["array"] ? 0 : 1; 
  }
  else
    return $a["key"] < $b["key"] ? -1 : 1;
} 

$mas1 = array(5, 4, 2, 6, 8, 23, 25);
$mas2 = array(3, 6, 7, 2);
$mas3 = array(3, 8, 2, 7, 4, 7);
$mas4 = array();
$mas5 = array(1, 2, 94, 5, 34);

modifyArray($mas1, 1);
modifyArray($mas2, 2);
modifyArray($mas3, 3);
modifyArray($mas4, 4);
modifyArray($mas5, 5);

$merge = array_merge($mas1, $mas2, $mas3, $mas4, $mas5);
usort($merge, "mySort");

foreach ($merge as $m) {
  echo $m["array"]." => ".$m["value"]."<br />";
}
?>

огромное спасибо, то что нужно, код работает как надо, вот только комментарии бы не помешали, просто скопировать код и прикруть к своему скрипту не проблема, но хотелось бы и самому что-то понять и в самом кодек разобраться (пхп только начал учить...) чтобы потом подобных ситуаций не возникало
taurii вне форума Ответить с цитированием
Старый 10.02.2012, 16:51   #4
taurii
Пользователь
 
Регистрация: 05.07.2011
Сообщений: 24
По умолчанию

p.s.: чисто из любопытства и необразованости
для чего символ "&" в строке "function modifyArray(&$array, $index)"

Последний раз редактировалось taurii; 10.02.2012 в 17:01.
taurii вне форума Ответить с цитированием
Старый 10.02.2012, 17:42   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от taurii Посмотреть сообщение
для чего символ "&" в строке "function modifyArray(&$array, $index)"
Функции -> Передача параметров по ссылке.
Andkorol вне форума Ответить с цитированием
Старый 10.02.2012, 23:15   #6
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Цитата:
Сообщение от taurii Посмотреть сообщение
огромное спасибо, то что нужно, код работает как надо, вот только комментарии бы не помешали, просто скопировать код и прикруть к своему скрипту не проблема, но хотелось бы и самому что-то понять и в самом кодек разобраться (пхп только начал учить...) чтобы потом подобных ситуаций не возникало
Пожалуйста, каждую строчку расписывать не буду, а так напишу

Код:
<?
function modifyArray(&$array, $index) {
  foreach ($array as $key => $value) {
    $array[$key] = array("array" => $index, "key" => $key, "value" => $value);
  }
}
//функция модифицирует исходный массив, так чтобы каждый его
//элемент содержал информацию, в каком массиве он был и под каким номером

function mySort($a, $b) {
  if ($a["key"] == $b["key"]) {
    return $a["array"] < $b["array"] ? -1 : $a["array"] == $b["array"] ? 0 : 1; 
  }
  else
    return $a["key"] < $b["key"] ? -1 : 1;
} 
//пользовательская функция сравнения элементов
//если у элементов были одинаковые индексы, то "меньше" (т.е. в отсортированном
//массиве он должен быть раньше) тот, у которого номер массива-источника меньше
//иначе тупо сравниваем индексы

$mas1 = array(5, 4, 2, 6, 8, 23, 25);
$mas2 = array(3, 6, 7, 2);
$mas3 = array(3, 8, 2, 7, 4, 7);
$mas4 = array();
$mas5 = array(1, 2, 94, 5, 34);

modifyArray($mas1, 1);
modifyArray($mas2, 2);
modifyArray($mas3, 3);
modifyArray($mas4, 4);
modifyArray($mas5, 5);
//модифицируем наши массивы

$merge = array_merge($mas1, $mas2, $mas3, $mas4, $mas5);
//слияние массивов
usort($merge, "mySort");
//сортировка массива с пользовательской функцией сравнения элементов

foreach ($merge as $m) {
  echo $m["array"]." => ".$m["value"]."<br />";
}
?>
Можно было в функции и не использовать передачу по ссылке, но тогда в памяти создалась бы копия исходного массива. Так как наша цель менять именно исходный массив, то передавая по ссылке мы экономим память. Хотя это скорее дело вкуса. Можно было бы её и так написать
Код:
function modifyArray($array, $index) {
  foreach ($array as $key => $value) {
    $array[$key] = array("array" => $index, "key" => $key, "value" => $value);
  }
  return $array;
}

$mas1 = modifyArray($mas1, 1);
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько масивов kuy Паскаль, Turbo Pascal, PascalABC.NET 3 17.10.2011 23:32
сортировка на нескольких листах Rider-12 Microsoft Office Excel 4 19.06.2010 14:29
Создание масивов tae1980 Microsoft Office Excel 2 19.03.2009 12:47
Pascal. Сортировка. Пересечение масивов. TOSAgrk Помощь студентам 4 08.02.2009 02:18
Создание МасивоВ Slavik Microsoft Office Excel 6 21.01.2009 01:26