你能帮我解决我的问题吗?我在数组中有问题。为了使我的问题简短,这是。我创建了一个代码,可以使用onclick自动替换并在数组中添加值。但是这里的javascript不是问题。在用户单击按钮或提交后,方案是。代码将验证它是否存在于数组中。顺便说一句,我有一个序列化的数组。如果列表中不存在该数组,它将自动添加到数组的末尾。如果存在,它将只替换数组的某些部分。
这是我的代码:
$data = unserialize(file_get_contents('addresses.txt'));
//fn_print_r($data);
$data_update = array(
'restaurant_id' => $restaurant_id,
'new_lat' => $new_lat_entry,
'new_long' => $new_long_entry,
'date_updated' => date('Y-m-d H:i:s')
);
$iterate = -1;
foreach($data as $key => &$value){
$iterate++;
//echo $data[$iterate]['restaurant_id'];
if($data[$iterate]['restaurant_id'] == $data_update['restaurant_id']){
$data[] = $data_update;
}else{
array_push($data,$data_update);
break;
}
}
这是示例序列化数组:
a:1:{i:0;{s:13:"id";s:4:"3";s:7:"name";s:8:"lmlm";}}
这是一个例子:
'BASE ARRAY'
Array(
[0] => Array(
[id] => 1,
[name] => popo
),
[1] => Array(
[id] => 3,
[name] => wewe
),
[2] => Array(
[id] => 2,
[name] => lolo
),
)
'NEW ARRAY'
Array(
[id] => 2,
[name] => fifi
)
如果在'BASE'数组中找到id。输出是:
Array(
[0] => Array(
[id] => 1,
[name] => popo
),
[1] => Array(
[id] => 3,
[name] => wewe
),
[2] => Array(
[id] => 2,
[name] => fifi
),
)
如果没有找到。 如果我们有一个像这样的新数组:
Array(
[id] => 6,
[name] => fifi
)
结果应为:
Array(
[0] => Array(
[id] => 1,
[name] => popo
),
[1] => Array(
[id] => 3,
[name] => wewe
),
[2] => Array(
[id] => 2,
[name] => lolo
),
[3] => Array(
[id] => 6,
[name] => fifi
),
)
答案 0 :(得分:1)
首先清理一下,
$temp_array
两次register_globals
,是吗?$target
$iterate
,因为您已经拥有$key
unset()
之后您应该foreach
$value
,否则会保留其参考现在,
您的示例令人困惑。为什么id为2的fifi取代了id为5的lolo?
看起来你的附加代码是正确的。可以使用$data[] = ...
来追加,尽管可能是在“其他”情况下,而不是“如果”的情况。要替换,您应该使用$data[$key] = ...
。
编辑:
不要试图在for循环中做所有事情 - 它会让我感到困惑,就像之前我做的那样。只需:
if (restaurant exists in array)
update array entry
else
append to array
由于你只是通过id匹配,所以你不能简单地使用array_search()
等。编写自己的比较id的版本。它仍然可以返回索引/ FALSE,因此您可以知道在结果为正的情况下要替换哪个元素。
一个想法:
$key = get_restaurant_index_by_id($data, $data_update['restaurant_id']);
if ($key === FALSE) {
$data[] = $data_update;
} else {
$data[$key] = $data_update;
}