0

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>';
    } 
7
  • 1
    You've not provided enough information for us to go on. Can you share the arrays? Commented Apr 16, 2019 at 17:17
  • Yes of course @JayBlanchard, let me a moment to modify the question Commented Apr 16, 2019 at 17:18
  • Make sure you add a print_r($Delete_repeated) that may well tell you what is wrong with the previous statements Commented Apr 16, 2019 at 17:27
  • Foreach loop will iterate basis on your total index present inside an array.If the array consist of single index then it will print single time. Commented Apr 16, 2019 at 17:28
  • @RiggsFolly Now i have added the arrays. If i add print_r($Delete_repeated); also prints the first value of the array. I supose that the problem it is, this part of the code $both_arrays = array_merge((array)$J_MinDecoded, (array)$D_MinDecoded); The problem it is that i need to mix the two arrays to know which data it its repeated. How i can fix it? Commented Apr 16, 2019 at 17:33

2 Answers 2

0

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

Sign up to request clarification or add additional context in comments.

Comments

0

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);

1 Comment

Thanks for your help, now the code it working. As it is working, i noticed that the word Kasi it is not deleted because the category_id are differents. How can i deleted the word repeated Kasi in this case, if the category_id it is different.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.