PHP新手问题:如何将数组$moduleDetail原样存入数组$url?
如何将数组键值对合并到CakePHP的URL数组中?
嘿,作为PHP新手遇到这种数组合并的问题太正常啦,我来帮你快速解决!你想要把$moduleDetail的键值对原样存入构建URL的数组里,其实用PHP的数组合并功能就能轻松搞定,给你两个简单的方案:
方案1:使用array_merge()函数
这是兼容性最好的方法,适合所有PHP版本:
$moduleDetail = array(); if (isset($menuItem['Page']['module_detail_slug'])) { $moduleDetail['slug'] = $menuItem['Page']['module_detail_slug']; } // 合并原有URL参数和$moduleDetail $urlParams = array_merge( array( 'controller' => $menuItem['Page']['ModuleActionModuleController']['ModuleController']['name'], // 这里补充你需要的其他参数,比如 'action' => 'view' 之类的 ), $moduleDetail ); // 生成最终链接 $urlLink = $this->Html->link( $menuItem['MenuPageLink']['title'], $urlParams );
array_merge()会把第二个数组(也就是$moduleDetail)的键值对合并到第一个数组里,如果有重复的键,第二个数组的值会覆盖第一个的,这里你的$moduleDetail只有slug键,完全不用担心冲突。
方案2:使用数组展开语法(PHP 5.6+)
如果你用的是PHP 5.6及以上版本,这种写法更简洁直观:
$moduleDetail = array(); if (isset($menuItem['Page']['module_detail_slug'])) { $moduleDetail['slug'] = $menuItem['Page']['module_detail_slug']; } // 直接展开$moduleDetail到URL参数数组中 $urlParams = array( 'controller' => $menuItem['Page']['ModuleActionModuleController']['ModuleController']['name'], // 其他原有参数... ...$moduleDetail // 三个点就是展开数组的语法 ); $urlLink = $this->Html->link( $menuItem['MenuPageLink']['title'], $urlParams );
这种写法会直接把$moduleDetail里的每个键值对“平铺”到$urlParams数组里,看起来更清爽。
不管用哪种方法,最终$urlParams里都会包含你原来的控制器参数,加上$moduleDetail里的slug键值对,CakePHP会自动把这些参数转换成符合路由规则的URL~
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

