değeri ile aynı uzunlukta değildir 2 php dizileri birleştirme

2 Cevap php

Bu gerçekten daha önce sorulmuş ise Afedersiniz, ben orada benzer başlıklı mesajların onlarca dışında benim ihtiyaçlarını donatılmış bir şey göremiyordu ;)

Ben aynı uzunlukta değildir 2 php dizileri birleştirmek, hem de diziler içinde aynı anahtar => değerlerden bulunan bir değer bunları birleştirmek çalışıyorum.

Benim ilk sorgu iç içe geçmiş bir dizi bir dizi üretir:

array
(
    1 => array
    (
'node_id' => 1,
    'lft' => 1,
    'rgt' => 4,
    'moved' => 0,
    'label' => 'Home',
    'entry_id' => 1,
    'template_path' => '',
    'custom_url' => '/',
    'extra' => '',
    'childs' => 1,
    'level' => 0,
    'lower' => 0,
    'upper' => 0
    ),
    2 => array
    (
'node_id' => 2,
    'lft' => 2,
    'rgt' => 3,
    'moved' => 0,
    'label' => 'Home',
    'entry_id' => NULL,
    'template_path' => '',
    'custom_url' => 'http://google.com/',
    'extra' => '',
    'childs' => 0,
    'level' => 1,
    'lower' => 0,
    'upper' => 0
    )
);

Benim ikinci dizi ben yukarıdaki diziye eklemek istediğiniz bazı ek anahtar / değerleri döndürür:

array
(
'entry_id' => 1,
'entry_title' => 'This is my title',
);

Ben anahtarındaki 'entry_id' maç yanı sıra eşleşmiyor alt diziler tutuyor olanların içine ek bilgi ekleme dizilerin hem birleştirmek istiyorum.

Yani, iki diziyi birleştirerek, ben ile bitirmek istiyorum

array
(
    1 => array
    (
'node_id' => 1,
    'lft' => 1,
    'rgt' => 4,
    'moved' => 0,
    'label' => 'Home',
    'entry_id' => 1,
    'template_path' => '',
    'custom_url' => '/',
    'extra' => '',
    'childs' => 1,
    'level' => 0,
    'lower' => 0,
    'upper' => 0,
    'entry_title' => 'This is my title'
    ),
    2 => array
    (
'node_id' => 2,
    'lft' => 2,
    'rgt' => 3,
    'moved' => 0,
    'label' => 'Home',
    'entry_id' => NULL,
    'template_path' => '',
    'custom_url' => 'http://google.com/',
    'extra' => '',
    'childs' => 0,
    'level' => 1,
    'lower' => 0,
    'upper' => 0,
    'entry_title' => NULL
    )
);

Aslında, bu yazıya bana sql ile bunu düşünüyorum yapar ...

UPDATE: I'm trying to update the query, but getting errors that I can't figure out how to fix on the join :(

SELECT `n`.*, round((`n`.`rgt` - `n`.`lft` - 1) / 2, 0) AS childs, 
count(*) - 1 + (`n`.`lft` > 1) + 1 AS level, 
((min(`p`.`rgt`) - `n`.`rgt` - (`n`.`lft` > 1)) / 2) > 0 AS lower, 
(((`n`.`lft` - max(`p`.`lft`) > 1))) AS upper 
FROM `exp_node_tree_6` `n`, `exp_node_tree_6` `p` 
LEFT JOIN `exp_channel_titles` ON (`exp_node_tree_6.entry_id`=`exp_channel_titles.entry_id`) 
WHERE `n`.`lft` 
BETWEEN `p`.`lft` 
AND `p`.`rgt` 
AND ( `p`.`node_id` != `n`.`node_id` OR `n`.`lft` = 1 ) 
GROUP BY `n`.`node_id` 
ORDER BY `n`.`lft`

Üzgünüm, ben sql oldukça yeniyim ... ve ben bu hakkı almak bile, bu iki tablodan maçlarını entry_id sahip olanlar dönecektir değil sadece?

Ben exp_node_tree_6 tablodan tüm verileri almak ve entry_id varsa diğer daldırma gerekiyor ...

2 Cevap

Bu does bu sorgu düzeyinde yapmak daha kolay olacak gibi. Bunu yapmak için SQL çizgisinde bir şey olurdu:

SELECT * FROM my_main_table
    LEFT JOIN my_entry_table ON (my_main_table.entry_id = my_entry_table.entry_id)

Eğer gerçekten, really PHP kullanmak istedim Aksi takdirde, o zaman çizgisinde bir şey yapmak isterdim:

$modified_rows = array();
foreach ($first_rows as $row) {
    if (!is_null($row['entry_id']) && $row['entry_id'] == $second_array['entry_id']) {
        # merge/add colums from second array
        $modified_rows []= array_merge($row, $second_array);
    } else {
        # don't modify the original array
        $modified_rows []= $row;
    }
}

$first_rows Bahsettiğiniz değiştirilmemiş ilk boyutlu dizidir, ve $second_array, ikinci biri olduğu.

Belki böyle:

foreach($first_array as $first) {
  if($first['entry_id'] == $second_array['entry_id']) {
    array_merge($first, $second_array);
    break;
  }
}