0

ポストメタフィールドから単一の値を設定解除/削除してから置換/更新しようとしていますが、array_push() と unset() のコードが各配列からすべての値を削除しています。

これが、現在使用しているコードの 2 つの半分です。

まず、古い値を見つけて削除するには:

 $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);

正しい値を設定解除して挿入するように機能しますが、meta[current][items] 配列に (更新または設定解除の両方で) 存在していた他の値は削除されます。

関数を実行する前の配列は次のようになります: pastie.org/8112933

array_push を実行すると、次のようになります: pastie.org/8112956

設定を解除すると、次のようになります: pastie.org/8112974

4

1 に答える 1

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()

于 2013-07-05T14:59:37.437 に答える