Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Перемешать два массива

Сообщения:  [1-10]    [11-20]   [21-30]  [31-34] 

 
 автор: confirm   (22.04.2012 в 20:52)   письмо автору
 
   для: Eugene77   (22.04.2012 в 20:45)
 

Да, самый верхний его уровень, корневые ключи.
Ясно, просто думал как обходить именно сам корень массива.

  Ответить  
 
 автор: Eugene77   (22.04.2012 в 20:45)   письмо автору
 
   для: confirm   (22.04.2012 в 19:07)
 

>Еще вопрос - то есть получается так, перемешиваются вложения, а по первичным ключам нет?
Мне непонятно что такое первичный ключ - это ж не SQL :-)

Если это ключи корневого массива, то тоже должно быть перемешивание значений с плавающей точкой. Не перемешиваются только массивы между собой, вместо того, чтобы их перемешивать, функция должна идти внутрь массива(являющегося элементом родительского) и перемешивать значения с соответствующим отростком другого массива.

  Ответить  
 
 автор: confirm   (22.04.2012 в 19:07)   письмо автору
 
   для: Eugene77   (22.04.2012 в 19:05)
 

Еще вопрос - то есть получается так, перемешиваются вложения, а по первичным ключам нет?

  Ответить  
 
 автор: Eugene77   (22.04.2012 в 19:05)   письмо автору
 
   для: confirm   (22.04.2012 в 18:22)
 

Ещё раз спасибо за обсуждение!
Приятно поговорить с человеком, хорошо знающим функции!
И полезно, - теперь я знаю в каком направлении дальше продожать разработку.

  Ответить  
 
 автор: confirm   (22.04.2012 в 18:22)   письмо автору
 
   для: Eugene77   (22.04.2012 в 18:17)
 

Тогда да.

  Ответить  
 
 автор: Eugene77   (22.04.2012 в 18:17)   письмо автору
 
   для: confirm   (22.04.2012 в 18:05)
 

>Ну я же в примере изменяю оба исходных массива. )

Цикл, который я написал полностью заменяет ваш код, а не частично.

Итоговую задачу он, конечно, не решает, но ту упрощённую, к которой вы свели - вроде решает.
Хоть он и очень медленный, раз нельзя сделать без циклов на функциях, то тогда он вроде лучше.

  Ответить  
 
 автор: confirm   (22.04.2012 в 18:05)   письмо автору
 
   для: Eugene77   (22.04.2012 в 17:48)
 

Ну я же в примере изменяю оба исходных массива. )
Массив А в процессе становиться лишь случайной частью самого себя, а массив В его остатком. По массиву С, который сохраняет порядок ключей исходных массивов строим результирующий массив. Если первый ключ массива С находится в массиве А, то берем элемент из этого массива по этому ключу, в противном случае берем такой элемент в массиве В. Полученный элемент добавляем в массив М, и так до конца.

Я так понимаю, что перемешать вложения, это сделать с ними тоже самое, что и с первичными ключами? Рекурсия конечно, и, если это возможно, лучше иметь не два массива, а один, каждое вложение которого, это два массива описывающие два набора. При обходе такого массива, это будет лучше.

  Ответить  
 
 автор: Eugene77   (22.04.2012 в 17:48)   письмо автору
 
   для: confirm   (22.04.2012 в 17:04)
 

>А при чем тут этот код? Вам же надо получить тот же порядок, что и в исходном массиве, а ключи то ведь раскиданы по обеим массивам, и порядок их отличен от исходных. В моем приеме массив C хранит порядок, в вашем примере что-то случайное.
Разве? Мне казалость, что в массиве $c должен получиться ровно тот же порядок, что и в массиве $a.
Тогда подскажите как произойдёт его нарушение?

  Ответить  
 
 автор: confirm   (22.04.2012 в 17:04)   письмо автору
 
   для: Eugene77   (22.04.2012 в 16:51)
 

А при чем тут этот код? Вам же надо получить тот же порядок, что и в исходном массиве, а ключи то ведь раскиданы по обеим массивам, и порядок их отличен от исходных. В моем приеме массив C хранит порядок, в вашем примере что-то случайное.

  Ответить  
 
 автор: Eugene77   (22.04.2012 в 16:51)   письмо автору
 
   для: confirm   (22.04.2012 в 16:39)
 

<?
foreach($a as$k => $v) {
   if(
mt_rand(0,2) > 1$c[$k] = $v;
   else 
$c[$k] = $b[$k];
}

Какой код будет быстрей работать?

В любом случае, большое вам спасибо, так как я увидел именно благодаря этому обсуждению, что простого решения задачи на функциях, вероятно, не существует.

  Ответить  

Сообщения:  [1-10]    [11-20]   [21-30]  [31-34] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования