2012-01-19 63 views
0

我有一個這樣的數組:PHP集團數組由值

Array ( 
    [0] => ing_1_ing 
    [1] => ing_1_amount 
    [2] => ing_1_det 
    [3] => ing_1_meas 
    [4] => ing_2_ing 
    [5] => ing_2_amount 
    [6] => ing_2_det 
    [7] => ing_2_meas 
) 

我想組的值到像這樣的數組:

Array (
    [0] => Array(
      [0] => ing_1_ing 
      [1] => ing_1_amount 
      [2] => ing_1_det 
      [3] => ing_1_meas 
     ) 
    [1] => Array(
      [0] => ing_2_ing 
      [1] => ing_2_amount 
      [2] => ing_2_det 
      [3] => ing_2_meas 
     ) 
) 

有可能被命名爲像許多其他項目即:ing_NUMBER_type

如何將第一個數組按照我想要的方式分組?我想這一點,但由於某些原因,strpos()有時會失敗:

$i = 1;  
foreach ($firstArray as $t) { 
      if (strpos($t, (string)$i)) { 
       $secondArray[--$i][] = $t; 
      } else { 
       $i++; 
      } 
     } 

有什麼不對?你能建議嗎?

回答

4

這取決於你想什麼來實現的,如果要分割陣列由塊使用array_chunk方法,如果你正在試圖創建多維數組根據號碼,你可以在你的循環中使用sscanf方法解析數值:

$result = array(); 

foreach ($firstArray as $value) 
{ 
    $n = sscanf($value, 'ing_%d_%s', $id, $string); 

    if ($n > 1) 
    { 
     $result[$id][] = $value; 
    } 
} 
+0

簡直太棒了! – Pateman

0

我做的是這樣的:

$result = array(); 
foreach ($firstArray as $value) 
{ 
    preg_match('/^ing_(\d+)_/', $value, $matches); 
    $number = $matches[1]; 
    if (!array_key_exists($number, $result)) 
    $result[$number] = array(); 
    $result[$number][] = $value; 
} 

基本上你通過你的第一個數組迭代,看看有沒有什麼號碼,並把它在正確的位置在您的最後一個數組。

編輯。如果您知道自始至終的編號從1開始,那麼您可以將$number = $matches[1];替換爲$number = $matches[1] - 1;,這樣您就可以得到與您的示例完全相同的結果。

1
<?php 
$ary1 = array("ing_1_ing","ing_1_amount","ing_1_det","ing_1_meas","ing_2_ing","ing_2_amount","ing_2_det","ing_2_meas"); 
foreach($ary1 as $val) 
{ 
    $parts = explode("_",$val); 
    $ary2[$parts[1]][]=$val; 
} 
?> 

這就造成:

Array 
(
    [1] => Array 
     (
      [0] => ing_1_ing 
      [1] => ing_1_amount 
      [2] => ing_1_det 
      [3] => ing_1_meas 
     ) 

    [2] => Array 
     (
      [0] => ing_2_ing 
      [1] => ing_2_amount 
      [2] => ing_2_det 
      [3] => ing_2_meas 
     ) 

)