Php 通过比较取消设置嵌套数组

Php 通过比较取消设置嵌套数组,php,arrays,serialization,multidimensional-array,foreach,Php,Arrays,Serialization,Multidimensional Array,Foreach,感谢您抽出时间来研究这个问题 我有一个数据库条目,其中包含一个(多个)序列化数组。可能是这样的: 数组1 然后,我将传递另一个序列化数组,该数组可能如下所示: 阵列2 条件 数组1可以有任意数量的嵌套数组(我的示例显示为2) 从选择器传递数组2;它应该循环数组1并删除其关联的嵌套数组 这些数组正在使用PHP进行比较 问题 问题是数组1中的每个数组在进行比较之前都需要先删除“search_name”数组键 数组1中的“search_name”键不应用于比较。删除“搜索名称”键时;然后可以对序列

感谢您抽出时间来研究这个问题

我有一个数据库条目,其中包含一个(多个)序列化数组。可能是这样的:

数组1 然后,我将传递另一个序列化数组,该数组可能如下所示:

阵列2 条件
  • 数组1可以有任意数量的嵌套数组(我的示例显示为2)
  • 从选择器传递数组2;它应该循环数组1并删除其关联的嵌套数组
  • 这些数组正在使用PHP进行比较
问题 问题是数组1中的每个数组在进行比较之前都需要先删除“search_name”数组键

数组1中的“search_name”键不应用于比较。删除“搜索名称”键时;然后可以对序列化数组进行有效比较

但是,当更新到数据库时;未删除的数组仍应包含“search_name”键。只需将其移除以进行比较;那么它的完整数组应该从数组1中删除

我的(坏的)代码 以下是我目前拥有的:

$search_array = unserialize($_POST['search_array']);  // Serialized Array 2
$bm_adv_search = $query_adv_search[0]->bm_adv_search;  // Serialized Array 1

$unser_array = unserialize($bm_adv_search);  // Unserialize Array 1

// Unset search_name from each array in Array 1
foreach($unser_array as $key => $value) {

    unset($unser_array[$key]['search_name']);  // THIS IS THE PROBLEM AREA
}

// Unset Array 2 from Array 1
if(in_array($search_array, $unser_array)) {
    if(($key = array_search($search_array, $unser_array)) !== false) {
        unset($unser_array[$key]);
    }
}

// Re-Serialize Array 1
$reser_array = serialize($unser_array);

// Update db with Array 1
.....
所以当我将数组1更新为db时;名称字段已从所有嵌套数组中删除,当更新时,这些嵌套数组将排除“搜索名称”

更新时,我需要“search_name”保留在array 1中的每个数组中。我只需要删除它以进行比较。。。然后从数组1中删除嵌套数组

想法 基本上,我存储的是用户保存的书签。当用户将一个项目加入书签时;将序列化数组添加到数组1。提示用户输入搜索书签的“名称”;因此出现了“搜索名称”字段

当用户单击以删除书签时;“search_name”键在比较数组(数组2)中不可用。数组1应该为数组2的存在而循环(减去“search_name”键)。。。并且整个匹配的数组(包括“search_name”)应该是未设置的

再次感谢您抽出时间回答这个问题。我真的很感谢你的帮助

更新 让它工作起来。谢谢你,米克尔

以下是更新的代码:

$search_array = unserialize($_POST['search_array']);  // Serialized Array 2
$bm_adv_search = $query_adv_search[0]->bm_adv_search;  // Serialized Array 1

$unser_array = unserialize($bm_adv_search);  // Unserialize Array 1

// Clone Array 1
$compare_array = $unser_array; 

// Unset search_name from each array in cloned Array 1
foreach($compare_array as $key => $value) {

    unset($compare_array[$key]['search_name']); 
}

// Unset Array 2 from Array 1
if(in_array($search_array, $compare_array)) {
    if(($key = array_search($search_array, $compare_array)) !== false) {
        unset($unser_array[$key]);
    }
}

// Re-Serialize Array 1
$reser_array = serialize($unser_array);

// Update db with Array 1
.....
将“Array 1”复制到临时数组以进行比较,但对主$unser_数组进行任何真正的修改

可以简单到$compar_array=$unser_array,然后在整个代码中修改一些变量

然后可以按数组键比较这两个键,因为它们在数组中的键是相同的。(您刚刚创建了此副本)

如果你需要帮助,让我知道

将“Array 1”复制到临时数组以进行比较,但对主$unser_数组进行任何真正的修改

可以简单到$compar_array=$unser_array,然后在整个代码中修改一些变量

然后可以按数组键比较这两个键,因为它们在数组中的键是相同的。(您刚刚创建了此副本)


如果你需要帮助,让我知道

您的注释是“Unset Array 1 from Array 2”,但您的Unset操作的是$unser_数组,实际上是数组1。那么,您正在检查阵列2和阵列1,但当您声明要从阵列2中删除时,您正在从阵列1中删除我才意识到这句话可能意味着任何一种方式,呵呵。编辑:为什么不将array1复制到一个临时数组进行比较,而是对主$unser_数组进行真正的修改呢。可以简单到$compar_array=$unser_array,然后在整个代码中修改一些变量。你说得对,Mikel。非常感谢你。以上编辑。编辑:谢谢米克尔,我不知道如何比较修改后的和原始的(可能是通过数组键?)。。。但我肯定会尝试一下。您的评论是“Unset Array 1 from Array 2”,但您的Unset操作的是$unser_数组,实际上是Array 1。那么,您正在检查阵列2和阵列1,但当您声明要从阵列2中删除时,您正在从阵列1中删除我才意识到这句话可能意味着任何一种方式,呵呵。编辑:为什么不将array1复制到一个临时数组进行比较,而是对主$unser_数组进行真正的修改呢。可以简单到$compar_array=$unser_array,然后在整个代码中修改一些变量。你说得对,Mikel。非常感谢你。以上编辑。编辑:谢谢米克尔,我不知道如何比较修改后的和原始的(可能是通过数组键?)。。。但我一定会试试的。现在就做小提琴。。非常感谢你!明白了,伙计。更新了我的问题。我仍然不确定“为什么”它会起作用。。。但效果很好。谢谢你抽出时间。只要我有足够的代表;我会回来投票(现在还不让我投票)。谢谢@乔希:没问题!老实说,你把这个问题搞砸了。这是一个相当基本的问题,但您尝试从概念中编写代码的努力和意愿令人印象深刻——不幸的是,SO的许多成员都失去了动力。干得好!我已经把你们所有的帖子都投了赞成票,希望你们能尽快投票:)谢谢米克尔。你也摇滚!这是漫长的一天,也是最后一件要完成的事情。我想我只是累了。。哈哈。但是你把它钉得很好;非常感谢。我是WordPress版主,为其他项目编写了大量自定义代码。我有一个帐户。。并丢失了登录信息。。。因此,我们必须重新开始。希望将来能见到你!现在正在做小提琴。。非常感谢你!明白了,伙计。更新了我的问题。我仍然不确定“为什么”它会起作用。。。但效果很好。谢谢你抽出时间。只要我有足够的代表;我会回来投票(现在还不让我投票)。谢谢@乔希:没问题!老实说,你把这个问题搞砸了。这是一个相当基本的问题,但您尝试从概念中编写代码的努力和意愿令人印象深刻——不幸的是,SO的许多成员都失去了动力。干得好!我已经把你们所有的帖子都投了赞成票,希望你们能尽快投票:)谢谢米克尔。你也摇滚!它是w
$search_array = unserialize($_POST['search_array']);  // Serialized Array 2
$bm_adv_search = $query_adv_search[0]->bm_adv_search;  // Serialized Array 1

$unser_array = unserialize($bm_adv_search);  // Unserialize Array 1

// Unset search_name from each array in Array 1
foreach($unser_array as $key => $value) {

    unset($unser_array[$key]['search_name']);  // THIS IS THE PROBLEM AREA
}

// Unset Array 2 from Array 1
if(in_array($search_array, $unser_array)) {
    if(($key = array_search($search_array, $unser_array)) !== false) {
        unset($unser_array[$key]);
    }
}

// Re-Serialize Array 1
$reser_array = serialize($unser_array);

// Update db with Array 1
.....
$search_array = unserialize($_POST['search_array']);  // Serialized Array 2
$bm_adv_search = $query_adv_search[0]->bm_adv_search;  // Serialized Array 1

$unser_array = unserialize($bm_adv_search);  // Unserialize Array 1

// Clone Array 1
$compare_array = $unser_array; 

// Unset search_name from each array in cloned Array 1
foreach($compare_array as $key => $value) {

    unset($compare_array[$key]['search_name']); 
}

// Unset Array 2 from Array 1
if(in_array($search_array, $compare_array)) {
    if(($key = array_search($search_array, $compare_array)) !== false) {
        unset($unser_array[$key]);
    }
}

// Re-Serialize Array 1
$reser_array = serialize($unser_array);

// Update db with Array 1
.....