PHP - array_push() и $array[] не работают?

1. PHP-функция.

Я создал функцию проверки, вот она в более короткой версии:

function my_function($input) {
   $settings = my_source(); // function taht outputs a long array

   foreach ($settings as $setting) {
      $id = $setting['id'];  
      $foo = $setting['foo'];
      $option = get_option('my_theme_settings');

        if($foo == "bar") {
           $valid_input[$id] = $input[$id];
        }  

   } 

   return $valid_input; 
}; 

В основном она берет $input и сохраняет его как $valid_input. Когда он получает новый $input, он перезаписывает старый #valid_inpu и т. д.

Я хочу создать дополнительный массив $valid_input[$id], который не будет перезаписывать себя, а просто вставит внутрь новые элементы.

2. Array_push(), который не работает

Таким образом, новый обновленный код будет выглядеть так:

function my_function($input) {
   $settings = my_source(); // function taht outputs a long array

   foreach ($settings as $setting) {
      $id = $setting['id'];  
      $foo = $setting['foo'];
      $option = get_option('my_theme_settings');

        if($foo == "bar") {
           $valid_input[$id] = $input[$id];
        } 

        else if($foo == "noupdate") { // it doesn't work
           $valid_input[$id] = array();        
           array_push($valid_input[$id], $input[$id]);
        } 

   } 

   return $valid_input; 
}; 

Как упоминалось в комментарии выше - это не работает, ввод всегда перезаписывает параметр, он создает array, но он всегда содержит только один элемент, который стирается вместе с новым (полагаю, array_push должен предотвращать такое поведение, верно?).

3.То же самое происходит и с $array[] =

function my_function($input) {
   $settings = my_source(); // function taht outputs a long array

   foreach ($settings as $setting) {
      $id = $setting['id'];  
      $foo = $setting['foo'];
      $option = get_option('my_theme_settings');

        if($foo == "bar") {
           $valid_input[$id] = $input[$id];
        } 

        else if($foo == "noupdate") { // it doesn't work
           $valid_input[$id][] = $input[$id];
        } 

   } 

   return $valid_input; 
}; 

. Тем не менее, старое значение $valid_input перезаписывается вместо того, чтобы вставлять элемент.

Есть идеи? Может быть, что-то не так с кодом? Вся эта функция является обратным вызовом Wordpress для функции, называемой register_setting(), но я думаю, что это в основном связано с PHP, поскольку люди на WPSE не могут мне помочь.

4. РЕДАКТИРОВАТЬ

Это делает именно то, что я хочу, но почему пункт 3. тогда не работает?

    else if($foo == "noupdate") { // it doesn't work
       $valid_input[$id][] = 'something';
       $valid_input[$id][] = 'something_else';
       $valid_input[$id][] = 'something_else2';
    } 
5
задан Wordpressor 8 March 2012 в 21:59
поделиться