感谢您抽出宝贵时间来研究这个问题。
我有一个包含序列化数组(多个数组)的数据库条目。它可能看起来像这样:
a:2:{
i:0;a:3:{s:11:"search_type";s:6:"owners";s:11:"search_text";s:4:"test";s:11:"search_name";s:4:"test";}
i:1;a:5:{s:8:"t_rating";s:3:"Yes";s:9:"t_ranking";s:3:"Yes";s:11:"search_type";s:8:"products";s:11:"search_text";s:5:"test2";s:11:"search_name";s:5:"test2";}
}
然后,我传递了另一个可能如下所示的序列化数组:
a:2:{s:11:"search_type";s:6:"owners";s:11:"search_text";s:4:"test";}
问题是数组1中的每个数组都需要先删除" search_name"在进行比较之前的数组键。
" search_name"数组1中的键永远不应该用于比较。当" search_name"密钥被删除;然后可以对序列化数组进行有效比较。
但是,当它更新到db时;未删除的数组仍应包含" 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更新到数据库时;名称字段已从所有嵌套数组中删除,更新时,排除" search_name"。
我需要" search_name"更新后保留阵列1中的每个数组。我只需要将其删除以进行比较......然后从数组1中删除嵌套数组。
基本上,我正在存储用户保存的书签。当用户为项目添加书签时;序列化数组被添加到数组1.用户被提示输入"名称"用于搜索书签;因此" search_name"字段。
当用户点击删除书签时; " search_name" key在比较数组中不可用(数组2)。数组1应该为数组2的存在而循环(减去" search_name"键)...并且应该取消整个匹配的数组(包括" search_name")。 / p>
再次感谢您在这个问题上的任何时间。我真的很感激任何帮助。
搞定了。谢谢Mikel !!
以下是更新后的代码:
$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
.....
答案 0 :(得分:0)
将“Array 1”复制到临时数组以进行比较,但对主$ unser_array进行任何真正的修改。
可以像$ compar_array = $ unser_array一样简单,然后在整个代码中修改一些变量。
然后您可以通过数组键比较两个,因为它们的键在数组中是相同的。 (你刚刚创建了这个副本)
Lemme知道您是否需要任何帮助!