【问题标题】:Replace single value in multidimensional array替换多维数组中的单个值
【发布时间】:2013-07-05 14:18:38
【问题描述】:

我正在尝试取消设置/删除然后替换/更新帖子元字段中的单个值,但我的 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);

它可以取消设置并插入正确的值,但 meta[current][items] 数组中的任何其他值(用于更新或取消设置)都将被删除。

在运行任何函数之前,数组如下所示: paste.org/8112933

在我运行 array_push 之后,它看起来像这样: paste.org/8112956

取消设置后它看起来像这样: paste.org/8112974

【问题讨论】:

  • 您的索引变量可能到处都需要$ 符号 - 还是这些常量?

标签: php unset array-push


【解决方案1】:

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() 并保留您当前的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2016-08-07
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多