首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP数组附加值

问PHP数组附加值
EN

Stack Overflow用户
提问于 2011-11-24 23:08:03
回答 3查看 961关注 0票数 0

我在将一些选项添加到模块数组时遇到了问题。我正在使用Opencart,并试图通过添加图像来扩展模块。为了做到这一点,并确保代码将来不会破坏任何东西,我想要添加到数组中,而不是替换它。

这是我到目前为止所拥有的代码:

代码语言:javascript
复制
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;

打印阵列,无图像或拇指:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [image_width] => 307
            [image_height] => 234
            [layout_id] => 1
            [position] => column_right
            [status] => 1
            [sort_order] => 1
        )

)

当我执行array_push时,我是否需要将其分配回数组?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-24 23:11:21

$module在每次迭代时都会被foreach()循环覆盖。因此,您的推送基本上是一个空操作,因为foreach将用来自$modules的下一个$module值销毁前一个(您推送到的) $module。你需要更多像这样的东西:

代码语言:javascript
复制
foreach($modules as &$module) {
    ...
    $module['image'] = $image;
    $module['thumb'] = ...;
}

在foreach中$module之前的&会把它变成一个引用,所以在循环中对$module的任何修改都会修改$modules中的原始元素,而不是在每次迭代中都会被丢弃的副本。

票数 2
EN

Stack Overflow用户

发布于 2011-11-24 23:13:50

$module,在您的foreach循环中是内容的副本。您将需要通过引用来访问它,或者推回到实际的数组$modules。

尝试将foreach签名修改为以下内容:

代码语言:javascript
复制
foreach ($modules as &$module) {
票数 1
EN

Stack Overflow用户

发布于 2011-11-24 23:13:48

尝试使用array_merge而不是array_push

代码语言:javascript
复制
array_merge($module, array(
    'image'        => $image,
    'thumb'        => $this->model_tool_image->resize($image, 100, 100)
)); 

编辑:

另外,由于print_r的输出应该是array_merge($module[0], array(...));,所以正确的值应该是

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8259154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档