2012-01-19 62 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 
     ) 

)