我在向一组模块添加一些选项时遇到问题。我正在使用Opencart并尝试通过添加图像来扩展模块。要做到这一点,并确保代码将来不会破坏任何东西,我想添加到数组而不是替换它。
这是我到目前为止的代码:
if (isset($this->request->post['special_module'])) {
$modules = $this->request->post['special_module'];
} elseif ($this->config->get('special_module')) {
$modules = $this->config->get('special_module');
}
$this->load->model('tool/image');
foreach ($modules as $module) {
if (isset($module['image']) && file_exists(DIR_IMAGE . $module['image'])) {
$image = $module['image'];
} else {
$image = 'no_image.jpg';
}
array_push($module, array(
'image' => $image,
'thumb' => $this->model_tool_image->resize($image, 100, 100)
));
}
print_r($modules);exit;
$this->data['modules'] = $modules;
打印阵列,没有图像或拇指:
Array
(
[0] => Array
(
[image_width] => 307
[image_height] => 234
[layout_id] => 1
[position] => column_right
[status] => 1
[sort_order] => 1
)
)
当我执行array_push时,是否需要将其分配回数组?
答案 0 :(得分:2)
$ module。因此,你的推送基本上是一个空操作,因为foreach将使用$ modules中的下一个$ module值销毁之前的$模块(你推到)。你需要更像这样的东西:
foreach($modules as &$module) {
...
$module['image'] = $image;
$module['thumb'] = ...;
}
foreach中$ {模块之前的&
将其转换为引用,因此循环中对$module
的任何修改都将修改$ modules中的原始元素,而不是将被删除的副本在每次迭代中。
答案 1 :(得分:1)
$ module,在你的foreach循环中是内容的副本。您需要通过引用访问它,或者回到实际的数组$ modules。
尝试将foreach签名修改为以下内容:
foreach ($modules as &$module) {
答案 2 :(得分:0)
尝试使用array_merge而不是array_push
array_merge($module, array(
'image' => $image,
'thumb' => $this->model_tool_image->resize($image, 100, 100)
));
编辑:
另外,因为print_r输出正确应该是array_merge($module[0], array(...));