Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP. Объединить два массива по индексам

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день
Не как не получается объединить два массива в один
Первый массив

Код:
Array
(
    [0] => Array
        (
            [name] => test1
            [value] =>  
            [locked] => 0
            [rank] => 7
        )
 
    [1] => Array
        (
            [name] => test2
            [value] =>  
            [locked] => 0
            [rank] => 8
        )
 
    [2] => Array
        (
            [name] => test3
            [value] =>  
            [locked] => 0
            [rank] => 9
        )
 
    [3] => Array
        (
            [name] => test4
            [value] =>  
            [locked] => 0
            [rank] => 10
        )
)

Второй массив

Код:
 
Array
(
    [0] => Array
        (
            [name] => test1
            [value] => 1111
            [locked] => 0
            [rank] => 7
        )
 
    [1] => Array
        (
            [name] => test2
            [value] => 2222
            [locked] => 0
            [rank] => 8
        )
 
    [2] => Array
        (
            [name] => test4
            [value] =>  
            [locked] => 0
            [rank] => 10
        )
 

 
хочу что бы получилось так в итоге

Код:
Array
(
    [0] => Array
        (
            [name] => test1
            [value] => 1111
            [locked] => 0
            [rank] => 7
        )
 
    [1] => Array
        (
            [name] => test2
            [value] => 2222
            [locked] => 0
            [rank] => 8
        )
 
    [2] => Array
        (
            [name] => test3
            [value] =>  
            [locked] => 0
            [rank] => 9
        )
 
    [3] => Array
        (
            [name] => test4
            [value] =>  
            [locked] => 0
            [rank] => 10
        )
)

 
Пробовал array_replace, но если разное кол-во элементов в массиве, то он заменяет первые, а дальше просто оставляет что есть ((( Вообщем не подходит. А как еще это сделать что бы не получился говонокод не знаю (((

----------
Абонентское обслуживание и ремонт компьютеров в Днепропетровске

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 01:47 30-07-2013 | Исправлено: Cheery, 02:13 30-07-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
ну в чем проблема то? проходите по элементам одного массива, проверяете есть ли подобный элемент в другом.. далее объединяете как хочется.
 
откуда же функции знать, что у вас привязка по name??
 
ps: если у вас уникальный name, то какой смысл использовать номерные индексы, а не ассоциативные ключи?
 
 
Array  
(  
    [test1] => Array  
        (  
            [value] =>  
            [locked] => 0  
            [rank] => 7  
        ),
...
)
 
это существенно упростит жизнь

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:11 30-07-2013 | Исправлено: Cheery, 02:15 30-07-2013
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ну в таком виде из БД я получаю

Код:
 
Array
(
    [0] => Array
        (
            [name] => test1
            [value] => 1111
            [locked] => 0
            [rank] => 7
        )  
...
)
 

 

Цитата:
ну в чем проблема то?

Очень трудно идут у меня массивы (((
 

Цитата:
проходите по элементам одного массива, проверяете есть ли подобный элемент в другом.. далее объединяете как хочется.  

1. А как пройти по двум массив одновременно, что бы сравнить их по name?

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 09:53 30-07-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke

Цитата:
 А как пройти по двум массив одновременно, что бы сравнить их по name?  

проще переделать массив так, как показал в примере. тогда проход по одному и проверка второго становятся элементарной вещью


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:00 30-07-2013
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А как переделать? Алгоритм скажите, пожалуйста.

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 10:09 30-07-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
перебрать массив и использовать поле name как ключ в новом массиве

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:11 30-07-2013
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Сижу и думаю как перебрать массив что бы НАМЕ стал ключом?
 
 
foreach($array as $k => $v){
   
  Не понимаю как вставить тут значение name, что бы оно стало ключом?
 
}
 

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 10:45 30-07-2013
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Помогите, пожалуйста
 
Добавлено:
Ну хоть примерчик, хоть что-то

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 15:46 30-07-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
ну когда же вы думать то начнете?  

Цитата:
foreach($array as $k => $v){  
    $newarr[$k] = $v; 
}  



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:21 30-07-2013
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Сделал так, массив как был так и остался.

Код:
 
while($row = $modx->db->getRow($sql)) {
        $blankTV[] =  array('name' => $row['name'], 'value' => $row['value'], 'locked' => $row['locked'], 'rank'=>$row['rank']);
    }    
    
    foreach($blankTV as $k => $v){  
        $newarr[$k] = $v;  
    }  
    
    print_r($newarr);
 

 

Код:
 
Array
(
    [0] => Array
        (
            [name] => test1
            [value] =>  
            [locked] => 0
            [rank] => 7
        )
 
    [1] => Array
        (
            [name] => test2
            [value] =>  
            [locked] => 0
            [rank] => 8
        )
 
    [2] => Array
        (
            [name] => test3
            [value] =>  
            [locked] => 0
            [rank] => 9
        )
...
)
 

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 22:51 30-07-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke

Цитата:
Сделал так, массив как был так и остался.

потому что я показал только пример.. а вашем случае это

Цитата:
  foreach($blankTV as $v){    
        $newarr[$v['name']] = $v;  
    }    



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:55 30-07-2013
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
а дальше какой алгоритм? Когда есть два массива с НАМАМИ в ключе? IF использовать и сравнивать ключи?
 
Если ключи совпадают, то берем значения второго массива и присваиваем первому массиву Если ключи не совпадают, то добавляем этот ключ в массив.
 
Так что ли?

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 23:05 30-07-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
ну подумайте, написал же выше..  
что вы делать будете, если никто отвечать то не будет на вопросы?
 

Цитата:
то берем значения второго массива и присваиваем первому массиву

смотря у какого массива выше приоритет.. если все поля второго, то можно просто брать элементы его и копировать вместо соответствующего элемента первого

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:12 30-07-2013
Oleg_de



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
попробуй:
 
print_r($array1+$array2);

----------
Германия глазами переселенцев и мигрантов ...

Всего записей: 336 | Зарегистр. 03-09-2001 | Отправлено: 23:40 30-07-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP. Объединить два массива по индексам


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru