2013-02-15 72 views
-1

我試圖平鋪一個數組,以便刪除重複項並保留唯一值。例如:PHP flatten array with duplicate values

$places = array( 
    array("United Kingdom","London","Camden","1"), 
    array("United Kingdom","London","Camden","5"), 
    array("United Kingdom","London","Camden","23"), 
    array("United Kingdom","London","Camden","71") 
); 

將成爲:

$places = array("United Kingdom","London","Camden","1,5,23,71"); 

$places = array('Country' => 'United Kingdom', 
       'County' => 'London', 
       'City' => 'Camden', 
       'Codes' => array(1,5,23,71) 
     ); 
+0

給誰標誌着我下來的問題,這將是很好知道我哪裏錯了,所以我知道未來。 – iltdev 2013-02-15 09:56:40

+0

不是我的失望,但這個問題至少有兩個問題:a)沒有證據表明你試圖解決問題,b)沒有表達方式會使其對別人有用。 – Jon 2013-02-15 10:06:43

+0

夠公平的。但是初學者很難解釋。我一定會在下次嘗試解決它時嘗試失敗。乾杯喬恩。 – iltdev 2013-02-15 10:11:38

回答

2

由於數組項中的所有值都是字符串,因此您可以將它們用作數組鍵的一部分,以方便起見。所以這是一個可能的解決方案:

$temp = array(); 
foreach($places as $items) { 
    $id = array_pop($items); 
    $key = serialize($items); 
    $temp[$key][] = $id; 
} 

$result = array(); 
foreach($temp as $k => $ids) { 
    $result[] = array_merge(unserialize($k), array($ids)); 
} 

它確實有利於方便而不是效率,但它很短。

See it in action

+0

非常感謝Jon。你的解決方案對我來說非常合適還要感謝示例代碼。我現在將通過它,並嘗試從中學習:) – iltdev 2013-02-15 09:55:25

1

在三個步驟:

  • 通過索引首先收集信息

  • 然後使用array_unique唯一值

  • 最後加入一個大的三個數組。

代碼

$places = array( 
    array("United Kingdom","London","Camden","1"), 
    array("United Kingdom","London","Camden","5"), 
    array("United Kingdom","London","Camden","23"), 
    array("United Kingdom","London","Camden","71") 
); 

foreach ($places as $p) { 
    for ($i=0; $i<count($p); $i++) { 
     $t[$i][]=$p[$i]; 
    } 
} 

for ($i=0; $i<count($t); $i++) { 
    $new[$i]= implode(",", array_unique($t[$i])); 
} 

$result=array_merge($new); 

print_r($result); 

Array ([0] => United Kingdom [1] => London [2] => Camden [3] => 1,5,23,71) 
+0

'array_unique'如何幫助這裏?它將值作爲*字符串*進行比較。 – Jon 2013-02-15 09:45:54

+0

它確實有幫助。請參閱我首先建議爲每列獲取一個數組。 – fedorqui 2013-02-15 10:02:45

+0

謝謝,fedorqui。很高興收到一些解決方案的不同方法。我計劃通過每一個,並找出它是如何工作:) – iltdev 2013-02-15 10:20:48

0

使用array_unique()像例如:

$places = array( 
array("United Kingdom","London","Camden","1"), 
array("United Kingdom","London","Camden","5"), 
array("United Kingdom","London","Camden","23"), 
array("United Kingdom","London","Camden","71") 
); 

echo "<pre>"; 
print_r(array_unique($places)); 

o/p 


Array 
(
    [0] => Array 
    (
     [0] => United Kingdom 
     [1] => London 
     [2] => Camden 
     [3] => 1 
    ) 
) 

希望能幫到它!

0
$places = array( 
    array("United Kingdom","London","Camden","1"), 
    array("United Kingdom","London","Camden","5"), 
    array("United Kingdom","London","Camden","23"), 
    array("United Kingdom","London","Camden","71") 
); 

$result = array(); 
foreach($places as $val){ 
    $result['Country'][$val[0]] = $val[0]; 
    $result['County'][$val[1]] = $val[1]; 
    $result['City'][$val[2]] = $val[2]; 
    $result['Codes'][$val[3]] = $val[3]; 
} 
$final = array(); 
foreach($result as $key=>$value){ 
    $final[$key] = implode(",",$value); 
} 

echo "<pre>"; 
print_r($final); 

輸出:

Array 
(
    [Country] => United Kingdom 
    [County] => London 
    [City] => Camden 
    [Codes] => 1,5,23,71 
) 
+0

檢查此答案,它滿足您的要求。 – 2013-02-15 09:58:46

+0

謝謝,Prasanth。這也是一個不錯的解決方案。我自己已經半途而廢了。再次感謝。 – iltdev 2013-02-15 10:15:32

+0

@iltdev:cool:D – 2013-02-15 11:33:18