Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中按值获取所有键的数组?_Php_Arrays - Fatal编程技术网

如何在PHP中按值获取所有键的数组?

如何在PHP中按值获取所有键的数组?,php,arrays,Php,Arrays,如何打开此阵列: $details = ["Dog" => "Natahlia", "Cat" => "Ryan", "Bird" => "Natahlia"]; 输入此(所需输出): 因为我的代码连接了这些值或者覆盖了它们,所以遇到了一些问题 $arr = array(); foreach($details as $key => $value){ if(array_key_exists($value,$arr)){ //this part i don

如何打开此阵列:

$details = ["Dog" => "Natahlia", "Cat" => "Ryan", "Bird" => "Natahlia"];
输入此(所需输出):

因为我的代码连接了这些值或者覆盖了它们,所以遇到了一些问题

$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;

无需循环整个阵列。
您只需要循环唯一的名称,并使数组与该名称相交。
array\u intersect将返回匹配的名称,并将键作为动物,因此array\u将该名称与键匹配,您将得到您期望的结果。
这只循环唯一的名称,因此可能比循环整个数组更快

$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"
    }
}

无需循环整个阵列。
您只需要循环唯一的名称,并使数组与该名称相交。
array\u intersect将返回匹配的名称,并将键作为动物,因此array\u将该名称与键匹配,您将得到您期望的结果。
这只循环唯一的名称,因此可能比循环整个数组更快

$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"
    }
}


它真的就是你想要并且总是想要调整的那些值吗?如果是这样,那么只需手动设置数组。我想不是tho,这意味着您需要解释什么决定了何时创建所需的结构您给出的示例数组不是有效的数组-很难知道在这些精确值之外您想要的是什么使用方括号我认为是正确的数组格式wrong@Er.AmitJoshi这是李浩的编辑,使它不正确同样地,.@Er.AmitJoshi
[]
array()
完全相同,它确实就是您想要并且总是想要调整的那些值吗?如果是这样,那么只需手动设置数组。我想不是tho,这意味着您需要解释什么决定了何时创建所需的结构您给出的示例数组不是有效的数组-很难知道在这些精确值之外您想要的是什么使用方括号我认为是正确的数组格式wrong@Er.AmitJoshi这是李浩的编辑,使它不正确再次说明。@Er.AmitJoshi
[]
array()
Nice Solutions Bro:)@Er.AmitJoshi谢谢。但老实说,我确信这不会永远是最快的方法。只有当阵列很大且宠物主人的想象力非常有限时,这种性能才会优于循环整个阵列。我想。不过我不确定。但我怀疑如果少于100-200件物品,速度会更快。好的解决方案兄弟:)@Er.AmitJoshi谢谢。但老实说,我确信这不会永远是最快的方法。只有当阵列很大且宠物主人的想象力非常有限时,这种性能才会优于循环整个阵列。我想。不过我不确定。但我怀疑如果少于100-200个项目,它会更快。你为什么要循环两次呢?您的$result是正确的输出。第二个循环应该做什么?谢谢,这是我瞎了,想象一个不同的输出,会回滚。为什么你要循环两次?您的$result是正确的输出。第二个循环应该做什么?谢谢,我是瞎子,想象一个不同的输出,将回滚。
array (
'Natahlia' => 
array (
    0 => 'Dog',
    1 => 'Bird',
),
'Ryan' => 
array (
    0 => 'Cat',
),
)