基于值

时间:2018-04-09 20:43:00

标签: laravel

如何根据价值观对一个集合进行分组?例如这一个:

Collection {#250 ▼
  #items: array:4 [▼
    "CASSETE_1" => "500"
    "CASSETE_2" => "500"
    "CASSETE_3" => "100"
    "CASSETE_4" => "100"
  ]
}

我需要对其进行分组并获得如下结果:

Collection {#250 ▼
      #items: array:4 [▼
        "CASSETE_1 / CASSETE_2" => "500"
        "CASSETE_3 / CASSETE_4" => "100"
      ]
    }

这可能吗?

我使用unique()但结果是:

Collection {#251 ▼
  #items: array:2 [▼
    "CASSETE_1" => "500"
    "CASSETE_3" => "100"
  ]
}

2 个答案:

答案 0 :(得分:1)

没有本地方法可以做到这一点,你需要自定义功能。这就是我所做的

1将集合转换为数组

2翻转

3按值过滤并按/

连接它们

4再次翻转

$arr=array("CASSETE_1" => "500",
    "CASSETE_2" => "500",
    "CASSETE_3" => "100",
    "CASSETE_4" => "100");
$result = array();
foreach (array_flip($arr) as $k=>$v) {
          $result[$k] = implode("/",array_keys(array_filter($arr, function($elem) use($k){
          return $elem == $k;
         })));
}
echo "<pre>";
print_r(array_flip($result));

输出

Array
(
    [CASSETE_1/CASSETE_2] => 500
    [CASSETE_3/CASSETE_4] => 100
)

答案 1 :(得分:0)

请尝试以下操作(首先将集合转换为数组):

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span></span>

输出应为:

$input = [
    "CASSETE_1" => "500",
    "CASSETE_2" => "500",
    "CASSETE_3" => "100",
    "CASSETE_4" => "100",
  ];

$values = array_unique(array_values($input));

 // output results 
$output =[];
foreach ($values as $v) {
    $index = implode(", ", array_keys($input, $v));
     $output[$index] = $v;
}

print_r($output);

您应该能够通过使用您需要的字符更改“,”来构建所需的索引字符串。