我的插件编码即将结束,它允许管理员将自定义数据添加到SQL DB'custom_tokens'。由于该插件允许使用多个“令牌”,因此我希望它按以下顺序排序(如果可以,“ enu”可以看作是令牌的类别):
[enu] => Array (
[0] => Array (
[name] => Enumivo
[contract] => enu.token
[symbol] => ENU
[logo] =>
)
[1] => Array (
[name] => Eurno
[contract] => token.eurno
[symbol] => ENO
[logo] =>
)
)
对于保存令牌来说,这一切都很好(我有PHP来检查该类别中是否已经有令牌,如果没有,则创建该类别。如果有,则将其追加。< / p>
问题在于删除条目。在将其制作为嵌套数组之前,它可以正常工作-您选择删除的令牌将被删除,数组将被重新洗牌-但现在我添加了顶层,我遇到了以下问题:例如,删除时, “ Eurno”还将上级键(“ enu”)重命名为数字。删除后的数组示例如下:
[0] => Array (
[name] => Enumivo
[contract] => enu.token
[symbol] => ENU
[logo] =>
)
所需的结果将是:
[enu] => Array (
[name] => Enumivo
[contract] => enu.token
[symbol] => ENU
[logo] =>
)
我认为有问题的代码如下:
// Get array //
$cur_tokens = get_option('custom_tokens');
// Set the nest to look in //
$cur_tokens = $cur_tokens['enu'];
// Initialise the loop //
foreach ($cur_tokens as $key => $cur) {
// Check which item has been selected for deletion //
if(isset($_POST['token-'.$key])) {
// Unset it //
unset($cur_tokens[$key]);
// Update the database //
update_option( 'custom_tokens', $cur_tokens );
}
}
任何帮助都将不胜感激。我已经尝试通过将键设置为null然后执行array_filter()来实现它,但是返回了相同的结果。
我知道这可能总是很愚蠢。
谢谢。
答案 0 :(得分:0)
代码似乎有很多错误。在我看来,您正在设置错误的数组。您需要在此处使用两次foreach来取消设置数组。因为它是多维的。因此,如果要使其消失,您实际上需要从数组中删除第二个键,在这种情况下为0或1。
foreach ($cur_tokens as $key => $cur) {
foreach($cur as $token_key =>$row){
if(isset($_POST['token-'.$token_key])) {
unset($row[0]);
}
}
}
然后数组将如下所示:
[enu] => Array (
[1] => Array (
[name] => Eurno
[contract] => token.eurno
[symbol] => ENO
[logo] =>
)
)
这是一个伪代码,但希望您能理解。
答案 1 :(得分:0)
感谢所有帮助过我的人,尤其是@misorude!
他们的回答帮助解决了问题。看来这个问题是由Misorude所说的(编辑我当前所在的循环)和在$ cur_tokens变量中定义子键的组合引起的。我还把update_options调用从循环中移除了。
有效的PHP代码如下:
$cur_tokens = get_option('custom_tokens');
if(isset($_POST['token'])) {
$arr = $_POST['token'];
foreach ($arr as $key => $cur) {
unset($cur_tokens['enu'][$key]);
}
update_option( 'custom_tokens', $cur_tokens );
}
编辑后的HTML是:
name="token['.$key.']"
正如Misorude所解释的那样,将选定的令牌放置在自己的数组中似乎可以解决问题。
非常感谢您的帮助。