我试图取消/删除然后替换/更新post meta字段中的单个值,但我的array_push()和unset()代码正在删除每个数组中的所有值。
以下是我目前正在使用的代码的两半。
首先,找到并删除旧值:
$ID = $_GET["post_id"];
$old = $entry["85"];
$old_meta = array();
$old_meta = get_post_meta($old,'_website',false);
if(in_array($ID, $old_meta[current][items])){
unset($old_meta[current][items][$ID]);
}
update_post_meta($old,'_website',$old_meta);
第二步将新值附加到适当的位置:
$port = $entry["24"];
$new_meta = array();
$new_meta = get_post_meta($port,'_website',false);
$new_meta[content][items] = array();
array_push($new_meta[content][items],$ID);
update_post_meta($port,'_website',$new_meta);
它可以取消设置并插入正确的值,但删除元[current] [items]数组中的任何其他值(用于更新或取消设置)。
在运行任何函数之前,数组如下所示: pastie.org/8112933
运行array_push之后,它看起来像这样: pastie.org/8112956
取消设置后,它看起来像这样: pastie.org/8112974
答案 0 :(得分:0)
in_array
检查数组中的元素是否具有等于该值的值,而不是键。所以你需要做这样的事情:
if(in_array($ID, $old_meta['current']['items'])){
foreach($old_meta['current']['items'] as $key => $val) {
if($val == $ID) {
unset($old_meta['current']['items'][$key]);
}
}
}
如果您需要检查密钥而不是值,只需将in_array()
替换为array_key_exists()
并保留当前代码。