2015-07-03 53 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