PHP, Arrays, sorting/merging - вопрос :) @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 27 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
Intelligent
новый человек
0
Сообщения: 243
Зарегистрирован: 31.05.01
Откуда: ../
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 08:06:00 
есть 2 массива, надо собрать в один, причём не потеряв порядок.
как ? [img]images/smiles/icon_smile.gif[/img]
вот эти массивы типа :
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre><?
$first=array();
$first[1]= "первый";
$first[6]= "четвёртый";
$first[16]= "пятый";
print_r($first);

$second=array();
$second[3]= "второй";
$second[5]= "третий";
$second[20]= "последний";
print_r($second);

?></pre><HR></BLOCKQUOTE>а надо получить:
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>
Array
(
[1]=> "первый";
[3]=> "второй";
[5]=> "третий";
[6]=> "четвёртый";
[16]=> "пятый";
[20]=> "последний";
)
</pre><HR></BLOCKQUOTE>

[ 28 Мая 2002: Исправлено Intelligent ]
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 08:51:00 
Что есть критерий порядка? Значения индексов?
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 09:14:00 
Примерно следующим образом:
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>
<?
foreach($first as $k=>$v){
$three[$k]=$v;
}

foreach($second as $k=>$v){
$three[$k]=$v;
}
?>
</pre><HR></BLOCKQUOTE>
только ты не сказал, что делать если ключи первого и второго массивов пересекаются.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 09:22:00 
Потом делаем вот так:

<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>
foreach($three as $value)
echo "<br>$value";
</pre><HR></BLOCKQUOTE>

...и видим, что получилось вовсе не то, что ожидалось (я, кстати, тоже вначале так написал)… [img]images/smiles/icon_smile.gif[/img]
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 09:32:00 
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>
<?
$first=array();
$first[1]= "первый";
$first[6]= "четвёртый";
$first[16]= "пятый";

$second=array();
$second[3]= "второй";
$second[5]= "третий";
$second[20]= "последний";

$maxIndex=0;
foreach($first as $key=>$value)
$maxIndex = ($maxIndex<$key)?$key:$maxIndex;
foreach($second as $key=>$value)
$maxIndex = ($maxIndex<$key)?$key:$maxIndex;
$res = array();
echo "MaxIndex: $maxIndex";
for ($i = 0; $i<=$maxIndex; ++$i) {
if (isset($first[$i]))
$res[$i] = $first[$i];
else if (isset($second[$i]))
$res[$i] = $second[$i];
}

foreach($res as $key=>$value)
echo "<br>$key:$value";
?>
</pre><HR></BLOCKQUOTE>

Вместо isset лучше использовать array_key_exists -- если данная версия PHP это поддерживает.
arlekino Муж.
соучастник
5
Сообщения: 481
Зарегистрирован: 05.07.01
Откуда: Москва
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 09:36:00 
А не проще ли использовать array_merge?

[ 28 Мая 2002: Исправлено Arlekino ]
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 09:59:00 
Получится то, что предложил Long. Т.е. вначале весь первый массив, потом -- весь второй.
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 10:01:00 
Arlekino мы не ищем простых путей [img]images/smiles/icon_wink.gif[/img]

Crazy тогда уж правильнее вот так:
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>
<?
$first=array();
$first[1]="первый";
$first[6]="четвёртый";
$first[16]= "пятый";
print_r($first);

$second=array();
$second[3]= "второй";
$second[5]= "третий";
$second[20]= "последний";
print_r($second);

foreach($first as $k=>$v){
$three[$k]=$v;
}
foreach($second as $k=>$v){
$three[$k]=$v;
}
ksort($three);

foreach($three as $k=>$value) echo "<br>$k $value";
?>
</pre><HR></BLOCKQUOTE> а вообще для слияния правда, лкучше использовать array_merge но при условии, что ключи в обоих массивах уникальны [img]shuffle.gif[/img]
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 10:03:00 
Crazy ksort() и всем будет счастье [img]images/smiles/icon_wink.gif[/img] array_merge не удобен если надо ситуацию рассматривать если ключи совпадают
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 10:06:00 
О! ksort тоже есть гуд. [img]images/smiles/icon_smile.gif[/img]
Intelligent
новый человек
0
Сообщения: 243
Зарегистрирован: 31.05.01
Откуда: ../
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 10:31:00 
ой … народ ….
на мыло то не пришли ваши посты … я тут посидел с пол-часика, ничего не увидел и ушёл …
а почту оставил проверятся … сорри что отлучился [img]images/smiles/icon_smile.gif[/img]
значь так, вроде всё решилось вот так :
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre><?
$first=array();
$first["a"]= "первый";
$first["e"]= "четвёртый";
$first["h"]= "пятый";

$second=array();
$second["b"]= "второй";
$second["e"]= "третий"; // attention ! same key !!!
$second["z"]= "последний";

function array_sorted_merge(){

$result=array();
for ($argument=0; $argument<@func_num_args(); $argument++) {
$merg=@func_get_arg($argument);
@reset($merg);
while ($element=@each($merg))
if (@$result[$element[0]])
@array_push($result,$element[value]);
else $result[$element[0]]=$element[value];
}
@ksort($result); // may be removed, merge will not be sorted
return $result;
}

$merged=array_sorted_merge($first,$second);
print"<pre>";
print_r($merged);

?></pre><HR></BLOCKQUOTE>
есть у кого идеи по оптимизации ?
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 10:46:00 
примерно так. только я бы func_num_args() вынес в отдельную переменную до цикла - нечего ее лишний раз дергать. и, но не уверен точно, кfжется foreach будет быстрее работать, чем цикл for...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 10:47:00 
Идея есть: сделать так, как сказал Long. [img]images/smiles/icon_smile.gif[/img]
Intelligent
новый человек
0
Сообщения: 243
Зарегистрирован: 31.05.01
Откуда: ../
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 10:55:00 
Long
ок, вынес. прав [img]images/smiles/icon_smile.gif[/img]
а foreach к кому применять ? [img]images/smiles/icon_wink.gif[/img]
Intelligent
новый человек
0
Сообщения: 243
Зарегистрирован: 31.05.01
Откуда: ../
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 10:57:00 
Crazy [img]beer.gif[/img]
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 10:58:00 
например, к результату func_get_args() [img]images/smiles/icon_wink.gif[/img]
Intelligent
новый человек
0
Сообщения: 243
Зарегистрирован: 31.05.01
Откуда: ../
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 13:39:00 
Long
и как ты хочешь это зарисовать ? [img]images/smiles/icon_smile.gif[/img]
оно же возвращяет аргументы по номерам, а не всё сразу …
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 14:03:00 
array func_get_args(void)
Returns an array in which each element is the corresponding member of the current user-defined function's argument list.
Прошу обратить внимание на окончание названия функции
[img]images/smiles/icon_wink.gif[/img]
Intelligent
новый человек
0
Сообщения: 243
Зарегистрирован: 31.05.01
Откуда: ../
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 14:37:00 
то есть вот так ? :
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>function array_sorted_merge(){

$result=array();
$arguments=@func_get_args();
while ($merg=@each($arguments)) {
@reset($merg);
while ($element=@each($merg))
if (@$result[$element[0]])
@array_push($result,$element[value]);
else $result[$element[0]]=$element[value];
}
@ksort($result); // may be removed, merge will not be sorted
return $result;
}
</pre><HR></BLOCKQUOTE>
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 15:01:00 
Например. [img]images/smiles/icon_wink.gif[/img]
Можно и так:
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>
function array_sorted_merge(){
$result=array();
$arguments=@func_get_args();
foreach($arguments as $merg)) {
….
}
</pre><HR></BLOCKQUOTE>
уж не знаю какой код будет работать быстрее [img]images/smiles/icon_wink.gif[/img]
Intelligent
новый человек
0
Сообщения: 243
Зарегистрирован: 31.05.01
Откуда: ../
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 15:27:00 
быстрее не быстрее, но если передать на сортировку 2 массива обьектов или массивов - взглюкивает.
Intelligent
новый человек
0
Сообщения: 243
Зарегистрирован: 31.05.01
Откуда: ../
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 15:29:00 
и кстати, не на всех версиях РНР твой вариант обработки массивов одинаково обрабатывается.
проверь.
я на этом сьел пару неприятных суток.
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 15:40:00 
Intelligent ну про масив массивов ты не спрашивал [img]images/smiles/icon_wink.gif[/img]
что ты имеешь ввиду? сортировка не работает? и когда ты успел съесть пару суток, если запостил только сегодня? [img]images/smiles/icon_wink.gif[/img]
Intelligent
новый человек
0
Сообщения: 243
Зарегистрирован: 31.05.01
Откуда: ../
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 15:47:00 
Long
а прикинь спросил бы … никто не запутался бы, а ? [img]images/smiles/icon_smile.gif[/img]
шутю, может и не запутался бы никто, но обьяснить что мне нада было бы не легче это точно.

и когда ты успел съесть пару суток, если запостил только сегодня?
так я про метод прохода по массиву говорю, а не про саму проблему слияния массивов.
и вообще, кто сказал что я чуть что сюда бегу ? я ещё сам подумать могу … до того как сюда постить [img]images/smiles/icon_smile.gif[/img]
Intelligent
новый человек
0
Сообщения: 243
Зарегистрирован: 31.05.01
Откуда: ../
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 15:51:00 
ок, решение там внутри было [img]images/smiles/icon_smile.gif[/img]
вот это ещё мона оптимизнуть ?
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre>function array_sorted_merge(){

$result=array();
$arguments=@func_get_args();
@reset($arguments);
while ($argument=@each($arguments)){
$merg=$argument[value];
while ($element=@each($merg))
if (@$result[$element[0]])
@array_push($result,$element[value]);
else $result[$element[0]]=$element[value];
}
@ksort($result); // may be removed, merge will not be sorted
return $result;
}
</pre><HR></BLOCKQUOTE>

[ 28 Мая 2002: Исправлено Intelligent ]
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 15:55:00 
Анекдот: Сын подходит к отцу-программисту и спрашивает:
- Папа, а почему солнце каждый день всходит на востоке, а заходит на западе?
- Сын, а ты проверял? Все точно так и есть?
- Да, папа, каждый день так.
- Тогда только ради Бога, НИЧЕГО НЕ ТРОГАЙ!!!
[img]laugh.gif[/img]
Intelligent
новый человек
0
Сообщения: 243
Зарегистрирован: 31.05.01
Откуда: ../
Заголовок сообщения: PHP, Arrays, sorting/merging - вопрос :)
Сообщение Добавлено: 28 Май 2002, 15:59:00 
[img]beer.gif[/img]
в тему однако [img]images/smiles/icon_smile.gif[/img]
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 27 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100