如果使用PHP不存在索引值,如何在数组中插入值?

时间:2013-11-19 00:48:13

标签: php arrays

你能帮我解决我的问题吗?我在数组中有问题。为了使我的问题简短,这是。我创建了一个代码,可以使用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

    ),

)

1 个答案:

答案 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;
}