2015-07-10 148 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 ..! –

相关问题