PHP数组附加值

时间:2011-11-24 15:08:03

标签: php opencart

我在向一组模块添加一些选项时遇到问题。我正在使用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时,是否需要将其分配回数组?

3 个答案:

答案 0 :(得分:2)

每次迭代时,foreach()循环都会覆盖

$ 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(...));