2017-03-27 102 views
0

我想这个数组PHP的基于阵列的价值

$passengers = array(
      'adult' => 2, 
      'child' => 1, 
      'infant' => 1 
     ); 

改变这样生成的序列。根据人数创建一个序列。

Array(
[adult] => Array(
     [0] => 1 
     [1] => 2 
    ) 

[child] => Array(
     [0] => 3 
    ) 

[infant] => Array(
     [0] => 4 
    ) 

我坚持这个代码

 $seq=1; 
     foreach($passengers as $paxKey => $paxVal){ 

      if($paxVal>1){ 
       $pax[$paxKey][] = $seq; 
       $seq = $seq+$paxVal; 
      }else{ 
       $seq=$paxVal+$seq; 
       $pax[$paxKey][] = $seq; 
      } 
     } 

任何援助表示高度赞赏。

+0

你想要创建什么?你能否提供正确的细节?从上面的数组到下面的数组还是从下面的数组到上面的? – jilesh

+0

你卡在哪里?我非常怀疑这个数组转换是否有用。但是这应该可以通过你自己来解决。提示:for-loop ... –

回答

1

试试这个:

$pax = []; 
$seq = 1; 

foreach($passengers as $key => $val){ 
    while($val--) { 
    $pax[$key][] = $seq; 
    $seq++; 
} 
} 

有两个周期:第一个周期的乘客,第二个创建你需要为每一个(种?)乘客尽可能多的元素。

+1

'$ pax'有什么用? – JustBaron

+0

我的错,复制/粘贴错误。现在它应该是正确的:) –

0
$result = []; 
$counter = 1; 
foreach($passengers as $key=>$value) 
{ 
    for($i=0;$i<$value;$i++) 
    { 
     $result[$key][] = $counter; 
     $counter++; 
    } 
} 
print_r($result); 
+0

虽然这段代码片段是受欢迎的,并且可能会提供一些帮助,如果它包含* how *的解释(// meta.stackexchange.com/q/114762) *为什么*这解决了这个问题。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 –