[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: массивы
Rachel
как объединить 2 двумерных массива,чтобы у них совпадали значения [id] и [type] в подмассиве.
в цикле не получается, т.к. колво элементов(с числовым индексом) не совпадает и
есно они не соответствуют в разных массивах. рекурсивно слить тоже не получается, они просто в конец добавляются
Например,

PHP
Array
(
    [
0] => Array
        (
            [
id] => 1
            
[name] => common              
        
)
    [
1] => Array
        (
            [
id] => 2
            
[name] => my            
        
)
    [
2] => Array
        (
            [
id] => 3
            
[name] => another            
        
)
    ...
)


PHP
Array
(
    [
0] => Array
        (
            [
type] => 1
            
[mes] => 8
            
[con] => 2
        
)
    [
1] => Array
        (
            [
type] => 3
            
[mes] => 3
            
[con] => 1
        
)
)

недостающие элементы заполнить $key="0".
в итоге получить

PHP
Array
(
    [
0] => Array
        (
            [
id] => 1
            
[name] => common 
            
[mes] => 8
            
[con] => 2             
        
)
    [
1] => Array
        (
            [
id] => 2
            
[name] => my 
            
[mes] => 0
            
[con] => 
                     
        
)
    [
2] => Array
        (
            [
id] => 3
            
[name] => another
            
[mes] => 3
            
[con] => 1              
        
)
)




Спустя 24 минуты, 58 секунд (13.02.2009 - 23:50) sergeiss написал(а):
Да несложно, вобщем-то... Надо несколько вложенных циклов делать.
Пусть первый массив будет $a, а второй - $b
Тогда получим такую конструкцию:
PHP
foreach( $a as $k_a => $val_a ) // цикл по всем элементам первого массива
{
    $k_found='';
    foreach( $b as $k_b => $val_b )
    {
        if( $val_a['id'] == $val_b['type'] ) // нашли совпадение
        { 
            foreach
( $val_b as $k => $val ) // переписываем все значения, кроме ключа 'type'
            {
                if( $k == 'type' ) continue;
                $a[$k_a][$k]=$val;
            }
            $k_found= $k_b ;
            break; // выход из цикла
        }
    }
    if( $k_found != '' )
    {
        unset( $b[$k_found] ); // удаляем ненужное уже значение массива $b - но можно этого и не делать
    }
}


Далее можно сделать двойной цикл по массиву $a для заполнения пустыми значениями тех величин, которые не были установлены. Но можно этого и не делать. Потому что при обращении к несуществующему элементу PHP делает определенные предположения. В частности, строка считается пустой.

И лучше пиши всегда ключи ассоциативного массива в кавычках!!!

PS. Все-таки элементы массива $b удалять надо smile.gif Чтобы потом те из них, что не были переписаны, были сразу же видны - потому что только они и останутся. И их надо будет добавить к массиву $a, изменив при этом индекс 'type' на индекс 'id', и добавив недостающие элементы.


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.