如何从数据库特定的选定值添加到解码的 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 中获取数据?