如何从数据库特定的选定值添加到解码的 Json 数组

Posted

技术标签:

【中文标题】如何从数据库特定的选定值添加到解码的 Json 数组【英文标题】:How to add to an decoded Json Array from the Database specific selected Values 【发布时间】:2019-10-26 19:54:18 【问题描述】:

我正在开发一个电影 WebApp。用户选择电影并将其添加到数据库中。 movie_list 列是 JSON,因为

我希望每次用户添加电影时,它都会被添加到数组中,如果它已经在数组中,我希望它不会被添加到数组中

问题是它有时会覆盖数组,而不是将其添加到现有数组中,只需添加嵌套数组或创建自定义键(0,1,2,3)

我试着像这样工作

  array_merge and array_add

  // It does overwrite it
  array['checkedMovie'] = 3

也想过每个,可惜不知道如何实现。

我的大脑被挤压了。

public function update(Request $request, TrackMovie $trackMovie)
    

      $currentCheckedMoviesArray = DB::table('track_movies')->where('user_id', $trackMovie->user_id)->get('checkedMovie');


      $currentCheckedMoviesArray = json_decode($currentCheckedMoviesArray, true)[0];

      $newarraychecked=array_add($currentCheckedMoviesArray,$currentCheckedMoviesArray['checkedMovie'], $trackMovie->checkedMovie);



      return dd($newarraychecked);

      $current_length = DB::table('track_movies')->where('user_id', $trackMovie>user_id)->value('lengthOfMovie');
      DB::table('track_movies')->where('user_id', $trackMovie->user_id)->update([
        'lengthOfMovie' => $current_length + $trackMovie->lengthOfMovie,
'checkedMovie' => $newarraychecked;
      ]);
        return dd(TrackMovie::all());
    

为了更清楚一点,我编辑了这个,因为我认为这是因为我的格式。

$currentCheckedMoviesArray = json_decode($currentCheckedMoviesArray, true)[0];
// DD Result
array:1 [▼
  "checkedMovie" => "["1", "2"]"
]

$trackMovie->checkedMovie
//DD Result
array:2 [▼
  0 => "2"
  1 => "4"
]

$newarraychecked=Arr::collapse($currentCheckedMoviesArray, $trackMovie->checkedMovie);
//DD Result
    []

实际结果:

This is the result what I get on the above code
array:1 [▼
  "checkedMovie" => "["1", "2"]"
]

There some more because I tested many things

array:1 [▼
  "checkedMovie" => "["1", "2"]"
   1             => "2"
   2             => "4"

]

预期结果:

The User is checking some movies.
// He already has some movies
checkedMovie = ["1","2","3"]

Now the Application Checks if it already existed the movie in the Database. 
If it does not contain in the database I want to add it. User selects Movie ID (5,6)
checkedMovie = ["1","2","3","5","6"]

After that, it will overwrite the Database column value

如果我忘记了要补充问题的内容,请发表评论,以便我可以编辑问题!

【问题讨论】:

尝试使用array_collapse 而不是array_add。让我知道它是否有效。 尴尬地它返回一个空数组而不是添加。我编辑并展示了我从每个变量中得到的结果,也许我并不清楚。 $newarraychecked=array_map("array_merge",$currentCheckedMoviesArray,$currentCheckedMoviesArray['checkedMovie'], $trackMovie->checkedMovie); 【参考方案1】:

您可以将新值推送到数组中,然后使用array_unique 过滤掉重复项

例子:

public function update(Request $request, TrackMovie $trackMovie)
    
      //Get Current Array from DB
      $currentCheckedMoviesArray = DB::table('track_movies')->where('user_id', $trackMovie->user_id)->get('checkedMovie');
      $currentCheckedMoviesArray = json_decode($currentCheckedMoviesArray, true)[0];

      //Decode JSON array
      $currentCheckedMoviesArray['checkedMovie'] = json_decode($currentCheckedMoviesArray['checkedMovie'])

      //Push the new Movie to the array
      $currentCheckedMoviesArray['checkedMovie'][] = $trackMovie->checkedMovie;

      //Remove duplicates from the array
      $newarraychecked = array_unique($currentCheckedMoviesArray['checkedMovie']);

      ....
    

【讨论】:

它确实会覆盖它。因此,就像添加的每个新数字一样,都会覆盖现有的数据库条目 $currentCheckedMoviesArray 是一维数组吗? 集合 #469 ▼ #items: array:1 [▼ 0 => #498 ▼ +"checkedMovie": "["1", "2"]" ] 这是完整的数组输出我不确定它是否是单个数组 print_r($currentCheckedMoviesArray) 解码后是什么结果?【参考方案2】:

尝试以下方法:

$checkedMovie=array(1,2,3);  
$selectedMovie=array(3,4,5,6);
$checkedMovie=array_unique(array_merge($checkedMovie,$selectedMovie));

【讨论】:

以上是关于如何从数据库特定的选定值添加到解码的 Json 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 4 中使用 JSONDecoder 从嵌套 JSON 中获取数据?

POST JSON 数据到特定对象 iOS

如何将下拉列表中的选定值添加到数据库中?

如何通过点击按钮将选定的 JSON 数据值从 uitableview 发送到服务器

从具有特定结构的 json 解码数据时出现问题

将值附加到存储在 MySQL 中的 JSON 解码数组参数