dongsuiying7773
2019-04-16 17:15 阅读 196
已采纳

foreach循环仅在循环中输出第一个值

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>';
    } 
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    drnl10253 drnl10253 2019-04-16 18:42

    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

    点赞 评论 复制链接分享
  • dongshao1021 dongshao1021 2019-04-16 17:42

    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);
    
    点赞 评论 复制链接分享

相关推荐