打扰一下,如果以前确实曾经问过这个问题,我看不到任何符合我需要的东西,而是出现在那里几十个类似的帖子中;)
我正在尝试合并两个长度不同的php数组,并将它们合并到一个存在于相同key =>的值上。两个数组中的值。
我的第一个查询从嵌套集生成一个数组:
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
)
);
我的第二个数组返回了一些我想插入上面数组的其他键/值:
array
(
'entry_id' => 1,
'entry_title' => 'This is my title',
);
我希望将附加信息的两个数组合并到关键字'entry_id'上的数组中,以及保持不匹配的子数组。
所以,通过组合这两个数组,我最终得到了
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
)
);
实际上,写出来让我觉得我应该通过sql ...
来做更新: 我正在尝试更新查询,但收到错误,我无法弄清楚如何修复连接:(
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`
抱歉,我对sql很新...即使我确实做到了这一点,这不仅会返回那些在两个表上都有entry_id匹配的东西吗?
我需要从exp_node_tree_6表中获取所有数据,并且如果entry_id存在,则能够进入另一个...
答案 0 :(得分:0)
它 就像在查询级别更容易做到。执行此操作的SQL将类似于:
SELECT * FROM my_main_table
LEFT JOIN my_entry_table ON (my_main_table.entry_id = my_entry_table.entry_id)
否则,如果你真的,真的想要使用PHP,那么你想做的事情就是:
$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
是您提到的未经修改的第一个多维数组,$second_array
是第二个。