2011-11-24 47 views
0

我遇到一個問題,爲模塊數組附加一些選項。我正在使用Opencart並嘗試通過添加圖像來擴展模塊。要做到這一點,並確保代碼不會在將來破壞任何東西,我想添加到數組而不是替換它。PHP數組附加值

這是我的代碼至今:

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我需要分配這回陣列?

回答

2

$ module每次迭代時都被foreach()循環覆蓋。因此,您的推送基本上是空操作,因爲foreach將從$ modules中取出下一個$模塊值,從而銷燬前一個$模塊(您推送到的模塊)。你會需要更多的東西是這樣的:

foreach($modules as &$module) { 
    ... 
    $module['image'] = $image; 
    $module['thumb'] = ...; 
} 

&在foreach $模塊它變成一個引用之前,因此該循環內的任何修改$module將修改$模塊原始的元素,而不是每次迭代都會被拷貝。

+0

輝煌,有這麼多我還是要學習,因爲PHP。是否有任何書籍/指南可供您推薦,以瞭解有關參考的更多信息?當我進行Google搜索時,我可以找到它實際的PHP引用。 –

+1

大多數在線的東西,你會發現PHP的教程是嚴重過時(談論PHP 4和早期5s),質量骯髒蹩腳,和/或錯誤。尤其要避免[w3fools](http://w3fools.com)的任何內容。 [PHP網站](http://php.net)其實很不錯,功能參考部分中的註釋通常也很有幫助。 –

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

1

$模塊,在您的foreach循環的內容的拷貝。您將需要通過引用來訪問它,或者推回到實際的數組$模塊中。

嘗試修改的foreach簽名如下:

foreach ($modules as &$module) {