2015-07-10 64 views
2

我有以下陣列:如何數組元素的字foreach循環內部分裂

$phones = array(
    [0] => Apple iPhone 4 
    [1] => Apple iPhone 5 
    [2] => Samsung Galaxy S6 
) 

我希望做的是分裂了這陣,從手機的型號分離品牌,所以到底我可以建立一個數組,會給我這樣的:

$phone_array = array (
    'Apple' => array (
     'iPhone 4', 'iPhone 5' 
), 
    'Samsung' => array (
     'Galaxy S6', 
) 
) 

到目前爲止,我有以下的未完成代碼:

 $brand_dictionary = "/(samsung|apple|htc|sony|nokia)/i"; 
     foreach($phones as $p) { 
      if(stripos($p,$brand_dictionary)) { 
       pr($p); 
       die(); 
      } 
     } 

但是這不能正常工作。

+0

首先,我不認爲你可以在if語句中使用stripos,導致它返回混合類型,而不是bool(讓我們說它在0的位置,那麼它將是錯誤的,就像你的例子)第二個問題是即使你找到'三星'你仍然需要找到'銀河'與您的代碼 – Buzka91

回答

3

嘗試 -

$phones = array(
    'Apple iPhone 4', 
    'Apple iPhone 5', 
    'Samsung Galaxy S6' 
); 

$new = array(); 

foreach($phones as $phone) { 
    $temp = explode(' ', $phone); 
    $key = array_shift($temp); 
    $new[$key][] = implode(' ', $temp); 
} 

var_dump($new); 

輸出

array(2) { 
    ["Apple"]=> 
    array(2) { 
    [0]=> 
    string(8) "iPhone 4" 
    [1]=> 
    string(8) "iPhone 5" 
    } 
    ["Samsung"]=> 
    array(1) { 
    [0]=> 
    string(9) "Galaxy S6" 
    } 
} 
2

可能很簡單,

轉儲的 $final
$phones = ['Apple iPhone 4','Apple iPhone 5','Samsung Galaxy S6']; 

$final = []; 

foreach($phones as $phone) 
{ 
    $brand_name = strtok($phone, " "); 
    $final[$brand_name][] = trim(strstr($phone, " ")); 
} 

array (size=2) 
    'Apple' => 
    array (size=2) 
     0 => string 'iPhone 4' (length=8) 
     1 => string 'iPhone 5' (length=8) 
    'Samsung' => 
    array (size=1) 
     0 => string 'Galaxy S6' (length=9) 
+1

好一個。 +1 ..! –