如果使用PHP不存在索引值,如何在数组中插入值?
你能帮我解决我的问题吗?我在数组中有个问题。简而言之,我的问题就在这里。我创建了一个代码,可以使用onclick自动替换和添加数组中的值。但是javascript在这里不是问题。场景是,在用户单击按钮或提交后。代码将验证它是否存在于数组中。顺便说一下,我有一个序列化数组。如果该数组在列表中不存在,它将自动添加到数组的末尾。如果存在,它将只替换阵列的某些部分 这是我的密码:如果使用PHP不存在索引值,如何在数组中插入值?,php,arrays,Php,Arrays,你能帮我解决我的问题吗?我在数组中有个问题。简而言之,我的问题就在这里。我创建了一个代码,可以使用onclick自动替换和添加数组中的值。但是javascript在这里不是问题。场景是,在用户单击按钮或提交后。代码将验证它是否存在于数组中。顺便说一下,我有一个序列化数组。如果该数组在列表中不存在,它将自动添加到数组的末尾。如果存在,它将只替换阵列的某些部分 这是我的密码: $data = unserialize(file_get_contents('addresses.txt'));
$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";}}
例如:
“基本阵列”
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
)
如果在“基本”数组中找到该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
),
)
首先进行一些清理
- 您正在初始化两次
$temp\u数组
- 你没有用,是吗
- 您没有使用
$target
- 您不需要
,因为您已经有了$iterate
$key
- 您应该在之后
,否则它将保留其引用$value
$data[]=…
进行追加,虽然可能是在“else”情况下,而不是在“if”情况下。要替换,应使用$data[$key]=…
编辑:
不要试图在for循环中做任何事情——这会让人困惑,就像我之前做的那样。简单地做:
if (restaurant exists in array)
update array entry
else
append to array
由于您仅通过id进行匹配,所以不能简单地使用et al.编写您自己的版本来比较id。它仍然可以返回index/FALSE,这样您就知道在结果为正的情况下要替换哪个元素
一个值得努力的想法:
$key = get_restaurant_index_by_id($data, $data_update['restaurant_id']);
if ($key === FALSE) {
$data[] = $data_update;
} else {
$data[$key] = $data_update;
}
顺便说一句,键以关联数组的形式返回,这就是为什么我在循环的foreach部分中使用iterate我没有使用register_globalsSo。如何在不使用循环的情况下验证ID?你能至少给我一个工作的想法吗?你应该在验证部分使用循环,而不是附加/更新部分。再次编辑我的答案。所以在验证部分。循环部分在函数内部?