首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中通过值获取所有键的数组?

如何在PHP中通过值获取所有键的数组?
EN

Stack Overflow用户
提问于 2018-06-17 21:30:33
回答 2查看 61关注 0票数 0

如何将此数组转换为:

代码语言:javascript
复制
$details = ["Dog" => "Natahlia", "Cat" => "Ryan", "Bird" => "Natahlia"];

到这个(所需的输出):

代码语言:javascript
复制
$details = [["Natahlia"=>["Dog","Bird"], "Ryan"=>"Cat"];

有一些问题,因为我的代码连接了这些值或者覆盖了它。

代码语言:javascript
复制
$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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-17 21:38:15

不需要对整个数组进行循环。

您只需要循环唯一的名称并使用该名称执行array_intersect。

array_intersect将返回与作为动物的关键字匹配的名称,因此array_keys它,您将获得您所期望的结果。

这只循环唯一的名称,所以它可能比循环整个数组更快。

代码语言:javascript
复制
$details = ["Dog" => "Natahlia", "Cat" => "Ryan", "Bird" => "Natahlia"];


foreach(array_unique($details) as $name){
    $new[$name] = array_keys(array_intersect($details, [$name]));
}
var_dump($new);

输出:

代码语言:javascript
复制
array(2) {
     ["Natahlia"] => array(2) {
            [0] => "Dog"
            [1] => "Bird"
    }
    ["Ryan"] => array(1) {
            [0] => "Cat"
    }
}

https://3v4l.org/paYRJ

票数 4
EN

Stack Overflow用户

发布于 2018-06-17 21:59:01

代码语言:javascript
复制
<?php

$details = ["Dog" => "Natahlia", "Cat" => "Ryan", "Bird" => "Natahlia"];

foreach($details as $animal => $name)
    $result[$name][] = $animal;

var_export($result);

输出:

代码语言:javascript
复制
array (
'Natahlia' => 
array (
    0 => 'Dog',
    1 => 'Bird',
),
'Ryan' => 
array (
    0 => 'Cat',
),
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50897140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档