Why foreach loop printing only the first value from the array?
$Jdata_cate = '[{"category_id":"103","name":"Martin","parent_id":0},{"category_id":"10","name":"Juan","parent_id":0},{"category_id":"9","name":"Kasi","parent_id":0}]';
$J_Min = strtolower($Jdata_cate);
$J_MinDecoded = json_decode($J_Min, true);
$Ddata_cate = '[{"category_id":"55","name":"Abc","parent_id":0},{"category_id":"41","name":"Pedro","parent_id":0},{"category_id":"40","name":"Kasi","parent_id":0}]';
$D_Min = strtolower($Ddata_cate);
$D_MinDecoded = json_decode($D_Min, true);
$both_arrays = array_merge((array)$J_MinDecoded, (array)$D_MinDecoded);
$Delete_repeated = array_unique($both_arrays);
foreach($Delete_repeated as $y=>$y_value){
echo $y_value['name'] . '<br>';
}
try this solution:
function array_unique_multidimensional($array, $key)
{
$temp_array = array();
$i = 0;
$key_array = array();
foreach ($array as $val) {
if (!in_array($val[$key], $key_array)) {
$key_array[$i] = $val[$key];
$temp_array[$i] = $val;
}
$i++;
}
return $temp_array;
}
$Jdata_cate = '[{"category_id":"103","name":"Martin","parent_id":0},{"category_id":"10","name":"Juan","parent_id":0},{"category_id":"9","name":"Kasi","parent_id":0}]';
$J_Min = strtolower($Jdata_cate);
$J_MinDecoded = json_decode($J_Min, true);
$Ddata_cate = '[{"category_id":"55","name":"Abc","parent_id":0},{"category_id":"41","name":"Pedro","parent_id":0},{"category_id":"40","name":"Kasi","parent_id":0}]';
$D_Min = strtolower($Ddata_cate);
$D_MinDecoded = json_decode($D_Min, true);
$both_arrays = array_merge((array)$J_MinDecoded, (array)$D_MinDecoded);
$Delete_repeated = array_unique_multidimensional($both_arrays, 'name');
foreach ($Delete_repeated as $y => $y_value) {
echo $y_value['name'] . '<br>';
}
here instead of array_unique
I'm using my defined function
The problem is where you call array_unique($both_arrays)
the default behavior is to compare items as strings, but they are arrays so it fails.
The solution is to add the SORT_REGULAR
flag as the second parameter.
$Delete_repeated = array_unique($both_arrays, SORT_REGULAR);