【发布时间】:2012-03-08 21:24:01
【问题描述】:
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_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 的旧值,而不是推送元素。
有什么想法吗?也许代码有问题?这整个函数是一个名为 register_setting() 的函数的 Wordpress 回调,但我想它主要与 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';
}
【问题讨论】:
-
所以你传递了不止一个
$setting和同一个$id。您是否尝试过在循环内调试输出$id和$foo以检查它是否实际上不是导致此行为的数据。我想到了一个场景,你的$valid_input[$id]被填满,最后一个$setting有$foo == "bar"并用$input[$id]替换你的数组。 $settings 的一些示例数据会很有帮助。 -
Basti,好吧,我想确实出了点问题,因为每个设置都有不同的 $id :>