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

如果使用PHP不存在索引值,如何在数组中插入值?,php,arrays,Php,Arrays,你能帮我解决我的问题吗?我在数组中有个问题。简而言之,我的问题就在这里。我创建了一个代码,可以使用onclick自动替换和添加数组中的值。但是javascript在这里不是问题。场景是,在用户单击按钮或提交后。代码将验证它是否存在于数组中。顺便说一下,我有一个序列化数组。如果该数组在列表中不存在,它将自动添加到数组的末尾。如果存在,它将只替换阵列的某些部分 这是我的密码: $data = unserialize(file_get_contents('addresses.txt'));

你能帮我解决我的问题吗?我在数组中有个问题。简而言之,我的问题就在这里。我创建了一个代码,可以使用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";}}
例如:

“基本阵列”

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
    ,否则它将保留其引用
现在,

你的例子令人困惑。为什么id为2的菲菲取代了id为5的洛洛

看起来您的附加代码是正确的。我们可以使用
$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?你能至少给我一个工作的想法吗?你应该在验证部分使用循环,而不是附加/更新部分。再次编辑我的答案。所以在验证部分。循环部分在函数内部?