0

週末に向けてすでにチェックアウトしたのかもしれませんが、特定の値に基づいて連想配列を更新するのに少し問題があります。たとえば、これまでに私が持っているものは次のとおりです。

$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(このデータはローカライズされてから、false を期待する JS ファイルに送信されます)。上記を実行しprint_r()ても、実際には何も更新されていません。

4

4 に答える 4

6

これは、foreach が通常、配列フィールドを値で渡すためです。あなたがする必要があるのはこれです:

foreach ($slideshow_vars as $key => &$value) {
    if($value == NULL) {
        $value = "false";
    }
}
于 2012-06-01T14:10:03.990 に答える
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これにより、探している変数が得られるはずです。

于 2012-06-01T14:28:28.390 に答える
1

各ループに$valueは、値が設定されます。の値を更新することにより$value、ローカル スコープで値を変更するだけで、その配列内に値を設定することはありません。そのためには、フィールドを参照して更新する必要があります。

foreach ($slideshow_vars as $key => $value) {
    if($value == NULL) {
        $slideshow_vars[$key] = "false";
    }
}
于 2012-06-01T14:11:46.237 に答える
1

正規パスを使用して、次のように配列を更新する必要があります。

$slideshow_vars[$key] = 'false';

または、その値だけでなく参照を内側のループに渡すために使用することで、サイパーが言及したもの。... as $key => &$value$value

于 2012-06-01T14:09:45.347 に答える