2013-10-22 184 views
0

我尝试几乎所有的东西,阅读槽整个php.net,我似乎无法找到一种方法如何获得具有相同值的所有键的数组。如何获得具有相同值的所有数组键

例如,这是数组:

Array 
(
    [869] => 87 
    [938] => 89 
    [870] => 127 
    [871] => 127 
    [940] => 127 
    [942] => 123 
    [947] => 123 
    [949] => 75 
) 

阵,我们希望在我的情况是:

Array 
(
    [1] => array 
    (
     [1] => 870 
     [2] => 871 
     [3] => 940 
    ) 
    [2] => array 
    (
     [1] => 942 
     [2] => 947 
    ) 
) 
+0

该写什么自己的功能? – sectus

+0

不要以为我有足够的经验。 – ProDraz

+0

你知道钥匙的最大限制吗? – silentboy

回答

1

这里是一个会做你想要什么样的功能。许多不也可能是最简单的,但它的工作原理:

<?php 

$myArray = array(
    869 => 87, 
    938 => 89, 
    870 => 127, 
    871 => 127, 
    940 => 127, 
    942 => 123, 
    947 => 123, 
    949 => 75 
); 
$newArray = $foundKeys = array(); 
$itt = 0; 
foreach($myArray as $i => $x){ 
    foreach($myArray as $j => $y){ 
     if($i != $j && !in_array($i,$foundKeys) && $x == $y){ 
      if(!is_array($newArray[$itt])){ 
       $newArray[$itt] = array($i); 
      } 
      array_push($newArray[$itt],$j); 
      array_push($foundKeys,$j); 
     } 
    } 
    $itt++; 
} 
print_r($newArray); 

结果:

Array 
(
    [2] => Array 
     (
      [0] => 870 
      [1] => 871 
      [2] => 940 
     ) 

    [5] => Array 
     (
      [0] => 942 
      [1] => 947 
     ) 

) 
1

这将是比较容易做,如果你的第二个数组有你检查的价值因为它是关键,例如

Array 
(
    [127] => array 
    (
     [1] => 870 
     [2] => 871 
     [3] => 940 
    ) 
    [123] => array 
    (
     [1] => 942 
     [2] => 947 
    ) 
) 

然后,你可以做这样的事情:

<?php 

$output = array(); 
foreach($your_array as $key => $current) { 
    if(!array_key_exists($current, $output)) { 
     // create new entry 
     $output[$current] = array($key); 
    } else { 
     // add to existing entry 
     $output[$current][] = $key; 
    } 
} 

print_r($output); 
?> 

这将返回上面的输出...

1

我的短代码。

$array =Array 
(
    869 => 87, 
    938 => 89, 
    870 => 127, 
    871 => 127, 
    940 => 127, 
    942 => 123, 
    947 => 123, 
    949 => 75 
); 

$return = array(); 
foreach ($array as $key => $value) 
    $return[$value][] = $key; 

var_dump(array_values($return)); 

http://3v4l.org/scDZ4

+0

将抛出未定义的索引错误,如果错误报告是曲柄向上,但很好,否则;) –

+0

@scrowler,你确定吗? – sectus

+0

雅,在你使用它们之前定义变量通常是一个好主意,以防万一,但大多数情况下你不会在活动服务器 –

相关问题