Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Слить два массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dubasua
Отправлено: 12 Января, 2013 - 12:07:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Доброго времени суток.
Нужно слить два многомерный массива так: если ключи совпадают, то нужно перезаписать из второго. Например
PHP:
скопировать код в буфер обмена
  1. $arr1['bond'][34] = 'enyVal';
  2. $arr1['bond'][35] = 'enyVal';
  3.  
  4. $arr2['bond'][34] = 'myVal';
  5.  
  6. //на выходе нужно получить
  7. $arr1['bond'][34] = 'myVal';
  8. $arr1['bond'][35] = 'enyVal';
  9.  
  10. //array_merge_recursive - не подойдет
  11.  
  12. /* и еще условие, ключи 'bond' и '34' динамические,
  13. то есть они неизвестные
  14. */


Уже пол часа голову ломаю...
 
 Top
sKaa
Отправлено: 12 Января, 2013 - 12:13:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


перебери циклом и перезапиши из второго массива.

PHP:
скопировать код в буфер обмена
  1. foreach($arr2['bond'] as $key => $val){
  2.   $arr1['bond'][$key] = $val;
  3. }
 
 Top
dubasua
Отправлено: 12 Января, 2013 - 12:15:18
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




dubasua пишет:
/* и еще условие, ключи 'bond' и '34' динамические,
то есть они неизвестные
*/
 
 Top
sKaa
Отправлено: 12 Января, 2013 - 12:15:57
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


рекурсивная функция перебора массива
 
 Top
LIME
Отправлено: 12 Января, 2013 - 12:18:29
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




http://www.php.su/array_replace_recursive " target="_blank">array_replace_recursive
>= 5.3.0

(Отредактировано автором: 12 Января, 2013 - 12:20:35)

 
 Top
Vaio
Отправлено: 12 Января, 2013 - 12:22:53
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




 
 Top
LIME
Отправлено: 12 Января, 2013 - 12:27:18
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Vaio таким образом будет замена только первого уровня вложенности
(Добавление)
более того
Цитата:
Оператор + возвращает левый массив, к которому был присоединен правый массив. Для ключей, которые существуют в обоих массивах, будут использованы значения из левого массива, а соответствующие им элементы из правого массива будут проигнорированы.
 
 Top
dubasua
Отправлено: 12 Января, 2013 - 12:30:32
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Вот что у меня получилось
PHP:
скопировать код в буфер обмена
  1.  
  2. private function mergeArrs($arr1,$arr2) {
  3.                
  4.         if (is_array(&$arr1)){
  5.                        
  6.                 foreach($arr1 as $key=>$val){
  7.                                
  8.                         if (is_array($val) AND isset($arr2[$key]) AND is_array($arr2[$key])){
  9.                                 $this->mergeArrs($val,$arr2[$key]);
  10.                                 continue;
  11.                         }
  12.                                
  13.                         if (isset($arr2[$key]))
  14.                                 $arr1[$key] = $arr2[$key];
  15.                                                        
  16.                 }// end foreach
  17.                        
  18.         return $arr1;
  19.                        
  20. }
  21.                
  22.         }
  23.  

(Добавление)
Погаричился..... Не работатет.
(Добавление)
Подправил, вот так работает
PHP:
скопировать код в буфер обмена
  1.  
  2. private function mergeArrs(&$arr1,$arr2) {
  3.                
  4. if (is_array($arr1)){
  5.                
  6.         foreach($arr1 as $key=>&$val){
  7.                                
  8.                 if (is_array($val) AND isset($arr2[$key]) AND is_array($arr2[$key])){
  9.                         $val = $this->mergeArrs($val,$arr2[$key]);
  10.                         continue;
  11.                 }
  12.                                
  13.                 if (isset($arr2[$key]))
  14.                         $arr1[$key] = $arr2[$key];
  15.                                                        
  16.                 }// end foreach
  17.                        
  18.                 return $arr1;
  19.                        
  20.         }
  21.                
  22. }
  23.  
  24.  
  25.  
  26.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB