我在将一些选项添加到模块数组时遇到了问题。我正在使用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时,我是否需要将其分配回数组?
发布于 2011-11-24 23:11:21
$module在每次迭代时都会被foreach()循环覆盖。因此,您的推送基本上是一个空操作,因为foreach将用来自$modules的下一个$module值销毁前一个(您推送到的) $module。你需要更多像这样的东西:
foreach($modules as &$module) {
...
$module['image'] = $image;
$module['thumb'] = ...;
}在foreach中$module之前的&会把它变成一个引用,所以在循环中对$module的任何修改都会修改$modules中的原始元素,而不是在每次迭代中都会被丢弃的副本。
发布于 2011-11-24 23:13:50
$module,在您的foreach循环中是内容的副本。您将需要通过引用来访问它,或者推回到实际的数组$modules。
尝试将foreach签名修改为以下内容:
foreach ($modules as &$module) {发布于 2011-11-24 23:13:48
尝试使用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(...));,所以正确的值应该是
https://stackoverflow.com/questions/8259154
复制相似问题