【问题标题】:How can i remove duplicate key and value from multiple array如何从多个数组中删除重复的键和值
【发布时间】:2019-06-10 12:50:23
【问题描述】:

我有一个多数组函数,需要从视图中的数组中删除重复值并显示在列表中。

数组尝试删除“mfgg_name”(如果出现超过 1 次)

array:44 [▼
 0 => array:4 [▼
   "mfgg_name" => "Solomon Colors, Inc."
   "mfgg_id" => 122
   "product_name" => "Lythic Protector"
   "product_id" => 2586
 ]
 1 => array:4 [▼
   "mfgg_name" => "Solomon Colors, Inc."
   "mfgg_id" => 122
   "product_name" => "Lythic SPD Protector"
   "product_id" => 2587
 ]
 2 => array:4 [▼
   "mfgg_name" => "Solomon Colors, Inc."
   "mfgg_id" => 122
   "product_name" => "Lythic Cleaner"
   "product_id" => 2588
 ]
 3 => array:4 [▼
   "mfgg_name" => "Solomon Colors, Inc."
   "mfgg_id" => 122
   "product_name" => "Lythic DAY1 Hardener"
   "product_id" => 2589
 ]

     @if(count($list_all_active_manufacturers) > 0 ) 

                                 {{dd($list_all_active_manufacturers)}}
                                    @foreach($list_all_active_manufacturers as $leedsManufacturer)
                                <div class="post" id="post{{$leedsManufacturer['mfgg_id']}}">
                                    <label class=" my-checkbox gry2" id="manufacturer">{{str_limit($leedsManufacturer['mfgg_name'], 300)}}
                                        <input type="checkbox" class="manufacturer common_selector" name="manufacturer[]" value="{{$leedsManufacturer['mfgg_id']}}">
                                        <span class="checkmark"></span>
                                    </label>
                                </div>

                                    @endforeach 
                                @endif

【问题讨论】:

  • 您的预期输出是什么?
  • 你是如何生成这个数组的?
  • 我想从数组中删除重复的mfgg_name 值并只显示一次
  • 我从数据生成了这个数组,我有多个产品,每个产品都有它的制造商,但我只需要显示制造商一次

标签: php laravel foreach


【解决方案1】:

你可以使用这个功能,

function unique_multidim_array($array, $key)
{
    $temp_array = [];
    $i          = 0;
    $key_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;
}
// unique by mfgg_name
$result = unique_multidim_array($yourArr,'mfgg_name'); 

【讨论】:

    【解决方案2】:

    那里可能有更好的答案,但这是基于数据质量我会做的 -

    foreach ($test as $key => $value) {
        unset($test[$key + 1]['mfgg_name']);
    }
    

    它的作用是保持名称是第一个数组,但之后为所有数组删除它 - 然后我会做一个 isset() 来检查输出中是否存在

    @if(count($list_all_active_manufacturers) > 0 ) 
        @foreach($list_all_active_manufacturers as $leedsManufacturer)
            <div class="post" id="post{{$leedsManufacturer['mfgg_id']}}">
                @if(isset($leedsManufacturer['mfgg_id]))
                    <label class=" my-checkbox gry2" id="manufacturer">{{str_limit($leedsManufacturer['mfgg_name'], 300)}}
                    <input type="checkbox" class="manufacturer common_selector" name="manufacturer[]" value="{{$leedsManufacturer['mfgg_id']}}">
                    <span class="checkmark"></span>
                    </label>
                @endif
            </div>
         @endforeach 
    @endif
    

    这是未经测试的,但可能会让您走上正轨 - 如果 isset() 不起作用,您可以尝试 ($leedsManufacturer['mfgg_name'] &gt; 0)@if(array_key_exists('mfgg_name', $leedsManufacturer)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 2018-01-18
      • 1970-01-01
      • 2022-12-03
      • 2019-02-05
      • 1970-01-01
      • 2017-06-01
      相关资源
      最近更新 更多