2014-09-25 79 views
2

的結果,最好的辦法,我有一個multidimentionla陣列什麼是顯示這個數組

array(
    "Airportbus"=>array(
         "NO"=>array(
            "from"=>"Barcelona", 
            "to"=>"Gerona" 
           ) 
         ), 
    "flight"=>array(
        "SK455"=>array(
           "from"=>"Gerona", 
            "to"=>"Stockholm", 
            "seat"=>"3A" 
           ), 
        "SK22"=>array(
           "from"=>"Stockholm", 
           "to"=>"New york", 
           "gate"=>"Gate 22", 
           "description"=>"Baggage wiil be transfered from your last leg", 
           "seat"=>"7B" 
           ) 
       ), 
    "train"=>array(
        "78A"=>array(
           "from"=>"Madrid", 
           "to"=>"Barcelona", 
           "seat"=>"45B" 
           ) 
       ) 
      ); 

我要打印這樣的結果。

1. Take train 78A from Madrid to Barcelona. Sit in seat 45B. 
2. Take the airport bus from Barcelona to Gerona Airport. No seat assignment. 
3. From Gerona Airport, take flight SK455 to Stockholm. Gate 45B, seat 3A. Baggage drop at ticket counter 344. 
4. From Stockholm, take flight SK22 to New York JFK. Gate 22, seat 7B. Baggage will we automatically transferred from your last leg. 

這裏的問題是

1.some陣列具有用不同的密鑰"gate","description"多個元件。 2.在結果中打印一些額外的文字,「坐」,「拿」。

我試圖用

$message = ""; 


if(issset($result['key'])) 
{ 
    $message += " some text ".$result['key']. " some text ", 
} 
if(issset($result['key2'])) 
{ 
    $message += " some text ".$result['key2']. " some text ", 
} 
if(issset($result['key2'])) 
{ 
    $message += " some text ".$result['key2']. " some text ", 
} 

我想,如果是低效的,因爲每一次新的數組鍵加我一定要添加更多的代碼打印結果。

有沒有更好的辦法可以做到這樣的情況,請大家幫忙。感謝提前:)

+0

至少從一個循環開始。你的數組與你的輸出不匹配。你怎麼知道訂單是火車 - 公共汽車的班機,列車有公共汽車 - 火車 – 2014-09-25 03:17:03

+0

@Dagon能否請你給我一個簡單的例子:( – 2014-09-25 03:19:11

+0

@Dagon,mm沒有訂單:( – 2014-09-25 03:20:03

回答

1

我希望這個圍脖草圖得到你的地方

$out=''; 
foreach($resut as $k=>$v){ 
if($k=='Airportbus'){ 
//process bus 
} 

if($k=='Train'){ 
//process train 
foreach($v as $kk=>$vv){ 

$trainid=$kk; 
$from=$v[$kk]['from']; 
$to=$v[$kk]['to']; 
$seat=$v[$kk]['seat']; 
$out .='you sit in.'$seat.' from '.$from.' to '.$to.' on train: '.$trainid;        
} 
} 

} 

替代創建函數:

function train($data){ 
foreach($data as $kk=>$vv){ 

    $trainid=$kk; 
    $from=$v[$kk]['from']; 
    $to=$v[$kk]['to']; 
    $seat=$v[$kk]['seat']; 
    $out .='you sit in.'$seat.' from '.$from.' to '.$to;        
    } 

return $out; 

} 
+0

好主意..... :)。你有什麼更多的建議 – 2014-09-25 03:26:20

+0

你還需要什麼? – 2014-09-25 03:28:48

+1

您可能想爲每個傳輸創建一個函數,解析數組並返回字符串,一個小的清理器程序 – 2014-09-25 03:29:41

1

這可能會做你的需要,以及(至少足夠接近):

$transport_data = YOUR_DATA; 

$count = 1; 
foreach ($transport_data as $transport_type => $transports) { 
    foreach($transports as $transport_id => $transport_details) { 
     echo $count . "." . " Take " . $transport_type . " " . $transport_id . " "; 
     echo "from " . $transport_details['from'] . " to " . $transport_details['to'] . ". "; 

     echo "Seating is "; 
     if(array_key_exists('seat', $transport_details)) { // if seat exists, display it 
      echo "Seat " . $transport_details['seat'] . ". "; 
     } else { 
      echo "not assigned. "; 
     } 

     echo "Gate is "; 
     if(array_key_exists('gate', $transport_details)) { // if gate exists, display it 
      echo $transport_details['gate'] . ". "; 
     } else { 
      echo "not assigned. "; 
     } 

     if(array_key_exists('description', $transport_details)) { // if description exists, display it 
      echo $transport_details['description'] . ". "; 
     } 
     echo "\n"; 
     $count = $count + 1; 
    } 
} 

輸出:

1. Take Airportbus NO from Barcelona to Gerona. Seating is not assigned. Gate is not assigned. 
2. Take flight SK455 from Gerona to Stockholm. Seating is Seat 3A. Gate is not assigned. 
3. Take flight SK22 from Stockholm to New york. Seating is Seat 7B. Gate is Gate 22. Baggage wiil be transfered from your last leg. 
4. Take train 78A from Madrid to Barcelona. Seating is Seat 45B. Gate is not assigned. 
0

我的程序解決方案,無需驗證或意見:

<?php 

function printDefaultTransportation($properties) { 
    $type = $properties['type']; 
    $from = $properties['from']; 
    $to = $properties['to']; 
    $id = isset($properties['id']) ? $properties['id'] : null; 
    $seat = isset($properties['seat']) ? $properties['seat'] : null; 

    echo "Take $type"; 
    if($id !== null) { 
     echo " $id"; 
    } 
    echo " from $from to $to."; 
    echo isset($seat) ? " Sit in $seat." : ' No seat assignment.'; 
} 

function printAirportTransportation($properties) { 
    $id = $properties['id']; 
    $from = $properties['from']; 
    $to = $properties['to']; 
    $seat = isset($properties['seat']) ? $properties['seat'] : null; 
    $gate = isset($properties['gate']) ? $properties['gate'] : null; 
    $description = isset($properties['description']) ? $properties['description'] : null; 

    echo "From $from Airport, take flight $id to $to."; 
    if($gate !== null) { 
     echo " $gate"; 
     if($seat !== null) { 
      echo ", seat $seat"; 
     } 
     echo '.'; 
    } else if($seat !== null) { 
     echo " Seat $seat."; 
    } 
    if($description !== null) { 
     echo " $description."; 
    } 
} 

function printTransportation($type, $id, $extra) { 
    static $functionsTypesMap = ['train'  => 'printDefaultTransportation', 
           'airportbus' => 'printDefaultTransportation', 
           'flight'  => 'printAirportTransportation']; 

    $properties = array_merge(['type' => $type, 'id' => $id], $extra); 
    call_user_func($functionsTypesMap[$type], $properties); 
} 

function printTransportations(array $transportations) { 
    foreach($transportations as $k => $v) { 
     $transportations[strtolower($k)] = $v; 
    } 

    $i = 1; 
    static $orderedTypes = ['train', 'airportbus', 'flight']; 
    foreach($orderedTypes as $type) { 
     if(!isset($transportations[$type])) { 
      continue; 
     } 

     foreach($transportations[$type] as $id => $properties) { 
      if($i > 1) { 
       echo "\n"; 
      } 
      echo "$i. "; 
      printTransportation($type, 
           (strtolower($id)==='no'? null : $id), 
           $properties); 
      ++$i; 
     } 
    } 
} 

$arr = ["Airportbus" => ["NO" => ["from" => "Barcelona", 
            "to" => "Gerona"]], 
     "flight"  => ["SK455" => ["from" => "Gerona", 
            "to" => "Stockholm", 
            "seat" => "3A"], 
         "SK22" => ["from" => "Stockholm", 
            "to" => "New york", 
            "gate" => "Gate 22", 
            "description" => "Baggage wiil be transfered from your last leg", 
            "seat" => "7B"]], 
     "train"  => ["78A" => ["from" => "Madrid", 
            "to" => "Barcelona", 
            "seat" => "45B"]] 
]; 

printTransportations($arr); 

輸出是:

 
1. Take train 78A from Madrid to Barcelona. Sit in 45B. 
2. Take airportbus from Barcelona to Gerona. No seat assignment. 
3. From Gerona Airport, take flight SK455 to Stockholm. Seat 3A. 
4. From Stockholm Airport, take flight SK22 to New york. Gate 22, seat 7B. Baggage wiil be transfered from your last leg.

評論:

  • 門缺失的 「飛行SK455」,因爲輸入沒有它。
  • 「New York」被輸出爲「New York」(它來自數組值)。
  • 我認爲,而不是使用數組,你應該使用類。
相關問題