2015-07-03 49 views
0

我有一个这样的数组:来自阵列创建数组值

$lessonOptions=array(); 
$lessonOptions[0]=array("Physics","6.00","2015-01-01","-","4"); 
$lessonOptions[1]=array("Physics","16.00","2015-01-01","-","2"); 
$lessonOptions[2]=array("Maths","10.00","2015-07-01","-","10"); 
$lessonOptions[3]=array("Maths","20.00","2015-07-01","-","10"); 

我想创建一个新的数组称为optionarray输出包含: **

物理学6.00 2015-01-04 -

物理学16.00 2015年1月1日 -


数学10.00 2015年7月1日 -

数学20.00 2015年7月7日 -

我的问题是,我可以看到数学的每一行,但只有物理学的一个行缺少。 如何显示所有行?

我实际的代码是:

$lessonGroup=$lessonOptions[0][0]; 
$display=FALSE; 
$state=0; 
$nbLessons=count($lessonsOptions); 

for ($i = 0; $i<$nbLessons; $i++) 
{  
if ($i+1!=$nbLessons) $lessonGroupSuivant=$lessonOptions[$i+1][0]; 
else $display=TRUE; 
switch ($state) 
    { 
    case 0 :    
     $infoLesson[$state]=$lessonOptions[$i]; 

    default : 
     {    
     if ($lessonGroup==$lessonGroupSuivant) 
      { 
      $infoLesson[$state]=$lessonOptions[$i]; 
      $state=$state+1; 
      } 
     else 
      { 
      $display=TRUE; 
      $lessonGroup=$lessonGroupSuivant; 
      $state=0;   
      } 
     } 
    } 

if ($display==TRUE) 
    {  
    //var_dump($infoLesson); 

    $display=FALSE; 
    } 
} 

我实际的数组(错误) 正如你所看到的,我的数组的大小是1,我需要有2个,因为我有两个领域的教训物理学。

array(1) { [0]=> array(5) { [0]=> string(31) "physics" [1]=> string(10)  "6.00" [2]=> string(10) "2015-01-01" [3]=> string(1) "-" [4]=> float(42) } } 

array(2) { [0]=> array(5) { [0]=> string(15) "Maths" [1]=> string(11) "10.00" [2]=> string(10) "2015-07-01" [3]=> string(1) "-" [4]=> float(10) } [1]=> array(5) { [0]=> string(15) "Maths" [1]=> string(11) "10.00" [2]=> string(10) "2015-07-12" [3]=> string(1) "-" [4]=> float(10) } } 
+2

什么是你acually想达到什么目的? – Djip

+0

@Djip我的新阵列infoLesson需要有所有lineOptions选项。我单独显示所有的课程 – kingmaker

+1

很不清楚你想实现什么 –

回答

0

好吧,我想我找到你需要的东西:

<?php 
$lessonOptions=array(); 
$lessonOptions[0]=array("Physics","6.00","2015-01-01","-","4"); 
$lessonOptions[1]=array("Physics","16.00","2015-01-01","-","2"); 
$lessonOptions[2]=array("Maths","10.00","2015-07-01","-","10"); 
$lessonOptions[3]=array("Maths","20.00","2015-07-01","-","10"); 

$optionarray = array(); 

$lastLessonKey = ''; 
$i = 0; 
foreach ($lessonOptions as $key => $data) { 
    if (empty($lastLessonKey)) { 
     $lastLessonKey = $data[0]; 
    } else if ($lastLessonKey !== $data[0]) { 
     $i++; 
     $lastLessonKey = $data[0]; 
    } 

    $optionarray[$i][] = $data; 
} 

var_dump($optionarray); 

输出:

array(2) { [0]=> array(2) { [0]=> array(5) { [0]=> string(7) "Physics" [1]=> string(4) "6.00" [2]=> string(10) "2015-01-01" [3]=> string(1) "-" [4]=> string(1) "4" } [1]=> array(5) { [0]=> string(7) "Physics" [1]=> string(5) "16.00" [2]=> string(10) "2015-01-01" [3]=> string(1) "-" [4]=> string(1) "2" } } [1]=> array(2) { [0]=> array(5) { [0]=> string(5) "Maths" [1]=> string(5) "10.00" [2]=> string(10) "2015-07-01" [3]=> string(1) "-" [4]=> string(2) "10" } [1]=> array(5) { [0]=> string(5) "Maths" [1]=> string(5) "20.00" [2]=> string(10) "2015-07-01" [3]=> string(1) "-" [4]=> string(2) "10" } } } 
+0

是的我想要一个像这样的数组输出。我认为你的数组格式有一点点错误。 – kingmaker

+0

缺少数组是什么意思?你想物理和数学是2个独立的数组吗?如果是这样,我可以轻松调整代码。 – Djip

+0

没有,因为我会在我的pdf中显示$ infoLesson。如果您可以检查我的代码,我将在80%的代码中完成但缺少一个元素。 – kingmaker

0

那么,你愿意组阵列的一些价值

$infoLesson = array(); 

foreach ($lessonOptions as $v) { 
    $infoLesson[$v[0]][] = $v; 
} 

然后你可以通过键检索数组。 例如打印$ infoLesson [ '数学']将让你

Array 
(
    [0] => Array 
     (
      [0] => Maths 
      [1] => 10.00 
      [2] => 2015-07-01 
      [3] => - 
      [4] => 10 
     ) 

    [1] => Array 
     (
      [0] => Maths 
      [1] => 20.00 
      [2] => 2015-07-01 
      [3] => - 
      [4] => 10 
     ) 

) 

而且$ infoLesson [ '物理']

Array 
(
    [0] => Array 
     (
      [0] => Physics 
      [1] => 6.00 
      [2] => 2015-01-01 
      [3] => - 
      [4] => 4 
     ) 

    [1] => Array 
     (
      [0] => Physics 
      [1] => 16.00 
      [2] => 2015-01-01 
      [3] => - 
      [4] => 2 
     ) 

) 
+0

是的,我需要将它组合并显示在一个和一个变量。这里我的变量是$ infoLesson。 – kingmaker

+0

现在查看我的答案,它是否适合你? – JungleZombie