2014-09-25 123 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”(它来自数组值)。
  • 我认为,而不是使用数组,你应该使用类。
相关问题