2012-06-01 101 views
0

這可能只是我已經簽出已經爲週末,但有一點麻煩更新基於某個值的關聯數組。例如,這裏是我到目前爲止有:更新Assosciative陣列

$slideshow_vars = array(
     'js_animation'   => $slideshow_options['js_animation'], 
     'js_slide_direction' => $slideshow_options['js_slide_direction'], 
     'js_slideshow'   => $slideshow_options['js_slideshow'], 
     'js_slideshow_speed' => $slideshow_options['js_slideshow_speed'], 
     'js_animation_duration' => $slideshow_options['js_animation_duration'], 
     'js_direction_nav'  => $slideshow_options['js_direction_nav'], 
     'js_control_nav'  => $slideshow_options['js_control_nav'], 
     'js_keyboard_nav'  => $slideshow_options['js_keyboard_nav'], 
     'js_mousewheel'   => $slideshow_options['js_mousewheel'], 
     'js_prev_text'   => $slideshow_options['js_prev_text'], 
     'js_next_text'   => $slideshow_options['js_next_text'], 
     'js_pause_play'   => $slideshow_options['js_pause_play'], 
     'js_pause_text'   => $slideshow_options['js_pause_text'], 
     'js_play_text'   => $slideshow_options['js_play_text'], 
     'js_randomize'   => $slideshow_options['js_randomize'], 
     'js_slide_start'  => $slideshow_options['js_slide_start'], 
     'js_animation_loop'  => $slideshow_options['js_animation_loop'], 
     'js_pause_on_action' => $slideshow_options['js_pause_on_action'], 
     'js_pause_on_hover'  => $slideshow_options['js_pause_on_hover'], 
     'js_controls_container' => $slideshow_options['js_controls_container'], 
     'js_manual_controls' => $slideshow_options['js_manual_controls'], 
     'js_start_function'  => $slideshow_options['js_start_function'], 
     'js_before_function' => $slideshow_options['js_before_function'], 
     'js_after_function'  => $slideshow_options['js_after_function'], 
     'js_end_function'  => $slideshow_options['js_end_function'] 
    ); 
foreach ($slideshow_vars as $key => $value) { 
    if($value == NULL) { 
     $value = "false"; 
    } 
} 
print_r($slideshow_vars); 

在多個陣列中的價值,他們正在輸出NULL - 好吧,我需要改變那些的false串(此數據爲被本地化,然後發送到一個JS文件,預計假)。當我執行上述print_r()它實際上沒有更新任何東西。我希望這只是一些小事 - 感謝任何幫助。謝謝!

回答

6

這是因爲通常的foreach由值傳遞數組字段。 你需要做的是這樣的:

foreach ($slideshow_vars as $key => &$value) { 
    if($value == NULL) { 
     $value = "false"; 
    } 
} 
+2

+1只是所以很清楚地向OP如何不同於他的代碼,我會在你的答案,你加說,'&'中的'前$ value'甚至鏈接到PHP參考手冊頁: http://www.php.net/manual/en/language.references.php – Paulpro

+0

現在有一句話我忘了,包括。 – cypher

+0

謝謝大家的幫助! – Zach

1

你必須使用規範的路徑來更新這樣的數組:

$slideshow_vars[$key] = 'false'; 

或使用... as $key => &$value提到什麼cyper通過內環的$value參考,而不只是它的價值。

1

每個循環,$value設置的值。通過更新的$value的價值,你只是改變它在局部範圍內,而不是設置該數組內的值。對於這一點,你要引用的領域和更新,因此:

foreach ($slideshow_vars as $key => $value) { 
    if($value == NULL) { 
     $slideshow_vars[$key] = "false"; 
    } 
} 
1

如果所有的按鍵都是一樣的,你想給自己節省了大量的代碼,你可以試試這個實驗:

$slideshow_vars = array_merge(// Merge two arrays: 
    // Create an array of the same keys, but all with values of "false" 
    array_combine( 
     array_keys($slideshow_options), 
     array_fill(0, count($slideshow_options), "false") 
    ), 
    // Remove values that equal false (may need to specify a more precise callback here) 
    array_filter($slideshow_options) 
); 

這應該會給你你正在尋找的$slideshow_vars變量。

+0

@Zach - 如果你想能夠處理改變的數組鍵,你可以試試這個解決方案。 – nickb