2013-10-22 230 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

雅,在你使用它們之前定義變量通常是一個好主意,以防萬一,但大多數情況下你不會在活動服務器 –

相關問題