如何将此数组转换为:
$details = ["Dog" => "Natahlia", "Cat" => "Ryan", "Bird" => "Natahlia"];
到这个(所需的输出):
$details = [["Natahlia"=>["Dog","Bird"], "Ryan"=>"Cat"];
有一些问题,因为我的代码连接了这些值或者覆盖了它。
$arr = array();
foreach($details as $key => $value){
if(array_key_exists($value,$arr)){
//this part i dont know what to do since += wont do it since it's a string and .= concatenates it
$arr[$value] = $key;
} else {
$arr[$value] = $key;
}
}
return $arr;
发布于 2018-06-17 21:38:15
不需要对整个数组进行循环。
您只需要循环唯一的名称并使用该名称执行array_intersect。
array_intersect将返回与作为动物的关键字匹配的名称,因此array_keys它,您将获得您所期望的结果。
这只循环唯一的名称,所以它可能比循环整个数组更快。
$details = ["Dog" => "Natahlia", "Cat" => "Ryan", "Bird" => "Natahlia"];
foreach(array_unique($details) as $name){
$new[$name] = array_keys(array_intersect($details, [$name]));
}
var_dump($new);
输出:
array(2) {
["Natahlia"] => array(2) {
[0] => "Dog"
[1] => "Bird"
}
["Ryan"] => array(1) {
[0] => "Cat"
}
}
发布于 2018-06-17 21:59:01
<?php
$details = ["Dog" => "Natahlia", "Cat" => "Ryan", "Bird" => "Natahlia"];
foreach($details as $animal => $name)
$result[$name][] = $animal;
var_export($result);
输出:
array (
'Natahlia' =>
array (
0 => 'Dog',
1 => 'Bird',
),
'Ryan' =>
array (
0 => 'Cat',
),
)
https://stackoverflow.com/questions/50897140
复制相似问题