抱歉我的头衔。我只是不知道怎么问这个。为了简化故事,我只需要替换数组的某个部分。假设我们有这个数组:
Array
(
[0] => Array
(
[restaurant_id] => 1236
[new_lat] => 76
[new_long] => 86
[date_updated] => 2013-11-15 17:20:58
)
[1] => Array
(
[restaurant_id] => 1247
[new_lat] => 6
[new_long] => 5
[date_updated] => 2013-11-15 17:20:58
)
[2] => Array
(
[restaurant_id] => 7456
[new_lat] => 21
[new_long] => 12
[date_updated] => 2013-11-15 17:20:58
)
)
现在我需要用这个替换索引2:
Array(
[2] => Array
(
[restaurant_id] => 1236
[new_lat] => 2
[new_long] => 1
[date_updated] => 2013-11-15 17:20:58
)
)
如果我发现有一个现有的restaurant_id,我需要更换。 如果有。更新那一行。我没有添加新阵列。
我有个主意,但我不知道该怎么做。我的想法是:
反序列化数组(因为我的数组是序列化形式)
找到目标索引。如果找到则删除该索引并添加我的新索引 索引到数组的底部然后再次序列化它。如果没有找到 仅添加在数组的底部并序列化。
我只是不知道我是否删除了索引。如果索引将自动移动。意味着如果我删除索引2,索引3将成为索引2,我的新数组将是索引3。
好的,这是所有人。感谢。
答案 0 :(得分:2)
获取包含目标元素的引用变量并进行修改。
foreach ($myArray as $myKey => &$myElement)
{
if ($myElement['restaurant_id'] == WHAT_IM_LOOKING_FOR)
{
$myElement['new_lat'] = ...;
...;
}
}
答案 1 :(得分:1)
你不必删除该索引;只是覆盖它。
解序列化
找到目标索引。如果找到,只需覆盖(不删除)。如果找不到,只需使用[]
添加到最后。
覆写:
$my_array[2] = array(
'restaurant_id' => 1236,
'new_lat' => 2,
'new_long' => 1,
'date_updated' => '2013-11-15 17:20:58'
);
此代码将使用此新代码覆盖您的索引2
。你以前不需要取消它。
答案 2 :(得分:1)
如果restaurant_id
是一个唯一的ID,如果你重新组织它,那么处理该数组要容易得多:
Array
(
[1236] => Array
(
[new_lat] => 76
[new_long] => 86
[date_updated] => 2013-11-15 17:20:58
)
[1247] => Array
(
[new_lat] => 6
[new_long] => 5
[date_updated] => 2013-11-15 17:20:58
)
[7456] => Array
(
[new_lat] => 21
[new_long] => 12
[date_updated] => 2013-11-15 17:20:58
)
)
之后,您可能会发现
更容易访问 ... isset($arr[$restaurantId]) ....
和
$arr[$restaurantId] = array('new_lat' => 42, .... )
将插入/更新有关条目是否存在的任何知识。
答案 3 :(得分:0)
好的,取消设置带有id的元素,然后求助,然后添加一个新元素:
unset($array[2]); // unset number 2
$array = array_values($array); // resort
$array[] = $newStuff; // add
祝你好运
答案 4 :(得分:0)
如果使用unset函数,索引将保持为空。
例如,如果你的$数组有4个值,0 1 2 3,如果你取消设置索引2,索引3将保持3,并且对数组的新添加将是索引4.
以下代码将说明这一点:
$a = array("zero", "one", "two", "three");
var_dump($a);
unset($a[2]);
var_dump($a);
$a[]="four";
var_dump($a);