2017-08-30 46 views
0


陣列組我有一個數組,看起來像這樣:
PHP創建的關鍵

array(5) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(3) "444" 
    [1]=> 
    string(4) "0081" 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    string(3) "449" 
    [1]=> 
    string(4) "0081" 
    } 
    [2]=> 
    array(2) { 
    [0]=> 
    string(3) "451" 
    [1]=> 
    string(4) "0081" 
    } 
    [3]=> 
    array(2) { 
    [0]=> 
    string(3) "455" 
    [1]=> 
    string(4) "2100" 
    } 
    [4]=> 
    array(2) { 
    [0]=> 
    string(3) "469" 
    [1]=> 
    string(4) "2100" 
    } 
} 

,我需要組到一個新的數組,看起來像:

array(2) { 
     [0]=> 
     array(2) { 
     [0]=> 
     string(3) "444,449,451" 
     [1]=> 
     string(4) "0081" 
     } 
     [1]=> 
     array(2) { 
     [0]=> 
     string(3) "455,469" 
     [1]=> 
     string(4) "2100" 
     } 
    } 

我'嘗試了很多腳本,但沒有成功。

function _group_by($array, $key) { 
     $return = array(); 
     foreach($array as $val) { 
      $return[$val[$key]][] = $val; 
     } 
     return $return; 
    } 
$newArray = _group_by($array, 1); (NO SUCCESS) 

感謝所有, 羅伊。

+0

什麼腳本讓你離你所需要的距離最近? –

+0

可能有一個更優雅的解決方案,但是你可以運行2個foreach腳本 - 第一個用於迭代和按第二個參數分組,第二個用於重構你需要的結構。 – Giedrius

+0

有幾十個類似的問題已經在SO上得到解答。搜索['array_reduce()'](http://php.net/manual/en/function.array-reduce.php)。 – axiac

回答

1

應該有更優雅的解決方案,但我能想到的最簡單的解決方案就是這樣。

$data = []; // The data you have pasted in the question 
$groups = []; 

foreach($data as $item){ 
    if(!array_key_exists($item[1], $groups)){ 
     $groups[$item[1]] = []; 
    } 

    $groups[$item[1]][] = $item[0]; 
} 

$structured = []; 
foreach($groups as $group => $values){ 
    $structured[] = [implode(',', $values), $group]; 
} 

我還沒有測試過這個,但類似的東西應該可以做到。這只是通過給定的數組,並以結構化方式收集所有條目(因此$groups變量將包含每個組共享一個鍵的數組條目,並且該鍵將對應於給定數組內的每個條目中的第二個條目)。從那裏,它只是重組它來獲得你所要求的格式。

http://php.net/manual/en/control-structures.foreach.php

+0

這樣做**不**以_useful_方式回答問題。 **爲什麼**你相信這是答案嗎? **它是如何工作的?簡單地告訴某人改變他們的代碼_或者僅僅給予一個沒有任何背景或意義的工作代碼的人不會幫助他們瞭解他們做錯了什麼,並且對未來的讀者也沒有什麼用處。 – GrumpyCrouton

+0

我已經添加了鏈接到'foreach'手動條目來解釋*如何工作:) – Giedrius

+0

謝謝。但是,這通常不足以解釋您的代碼如何工作。我通常會在任何地方通過並在我的代碼中添加註釋,這可能會讓某些不知道他們在看什麼的人感到困惑。無論如何,通過鏈接到文檔,您的答案會更好。 :) – GrumpyCrouton