2017-03-05 81 views
1

我正在嘗試排序下面的數組。處理數組PHP

列S

$fruits = array(
    'mango', 
    'mango red', 
    'mango yellow', 
    'orange', 
    'banana', 
    'apple', 
    'apple red', 
    'apple green', 
); 

我做了什麼:

$data = array_flip($fruits); // flip array 
$data = array_fill_keys(array_keys(array_flip($data)), 'array(),'); // fill array value: "array()," 

print_r($data); 

我想這樣的結果:

$fruits = array(
    'mango'  => array(
     'red'  => array(), 
     'yellow' => array(), 
    ), 
    'orange' => array(), 
    'banana' => array(), 
    'apple'  => array(
     'red'  => array(), 
     'green'  => array(), 
    ), 
); 

有誰知道如何做到這一點?

希望你能理解這個問題。先謝謝你。

回答

1

循環遍歷數組,並拆分字符串。然後遞歸創建嵌套數組。

$result = array(); 
foreach ($fruits as $f) { 
    $f_array = explode(' ', $f); 
    $start = &$result; 
    foreach ($f_array as $word) { 
     if (!isset($start[$word])) { 
      $start[$word] = array(); 
     } 
     $start = &$start[$word]; 
    } 
} 
var_dump($result); 

DEMO

+0

謝謝。做工精細 – sasa

+0

'$水果=陣列( \t '蘋果綠一個', \t'apple green two', );'//最佳答案 – sasa

1

使用以下方法(因爲當前的陣列):

$result = []; 
foreach ($fruits as $fruit) { 
    $parts = explode(' ', $fruit); 
    if (count($parts) == 1) { 
     $result[$fruit] = []; 
    } elseif (isset($result[$parts[0]])) { 
     $result[$parts[0]][$parts[1]] = []; 
    } 
} 

print_r($result); 
+0

謝謝..工作正常 – sasa

+0

這不會推廣到mor每個水果中的單詞不超過2個單詞。 – Barmar

+0

@Barmar,我知道,這就是爲什麼我寫*爲你當前的數組* – RomanPerekhrest