【问题标题】:Search and delete specific object inside an array in PHP [duplicate]在PHP中搜索和删除数组中的特定对象[重复]
【发布时间】:2021-02-16 05:14:41
【问题描述】:

我有这样的数组结构:

[{"name":"username1","id":0},{"name":"username2","id":1}]

在我的 mysql 数据库中,它是 json 编码的 我正在尝试搜索特定 id 并删除该对象并按原样保存其他数组。

$arr_data=json_decode($jsonData);
         foreach(arr_data as $k=> $data)
            {
             if($request->id==$data->id)
                {
                  unset($arr_data[$k]);
                  $updateData =  DataTable::where(['id'=>$request->id])
                    ->update(['update_column' =>json_encode($arr_data)]);
                }
            }

问题是我的数据在删除后没有以正确的格式存储。

新的 json 格式数据以这种格式存储:

{"1":{"name":"username1","id":1}}

任何解决此问题的建议。

【问题讨论】:

  • @LelioFaieta:在我上面的代码中,索引被删除,但我必须保存格式未正确保存的剩余数组元素
  • 这个答案:stackoverflow.com/a/20373067/14481105 向您展示了如何从新数据中删除密钥。
  • json_encode() 保留您的数组键,除非它认为可以省略它们:“在对数组进行编码时,如果键不是从 0 开始的连续数字序列,则所有键都编码为字符串,并为每个键值对明确指定。"

标签: php


【解决方案1】:

这对我有用

$jsonData = '[{"name":"username1","id":0},{"name":"username2","id":1},{"name":"username2","id":2}]';

$arr_data=json_decode($jsonData);

if(($index = array_search($request->id, array_column( $arr_data, 'id'))) !== false) {
  unset($arr_data[$index]);
  $arr_data = array_values($arr_data);
}

$updateData =  DataTable::where(['id'=>$request->id])
                ->update(['update_column' =>json_encode($arr_data)]);

【讨论】:

    猜你喜欢
    • 2019-12-03
    • 2013-09-08
    • 2016-04-13
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多