显示此数组结果的最佳方式是什么


What is the best way to display the result of this array

我有一个多维数组

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.一些数组具有更多具有不同密钥CCD_ 1的元素。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 ",
}

我认为if是低效的,因为每次添加新的数组键时,我都必须添加更多的代码。

在这种情况下有更好的方法吗,请帮忙。提前感谢:)

我希望这个ruff草图能让你在中有所收获

$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;
}

这也可以满足您的需求(至少足够接近):

$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.  

没有验证或注释的程序解决方案:

<?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.从马德里乘78A次列车到巴塞罗那。坐在45B。2.从巴塞罗那乘坐机场巴士前往赫罗纳。没有座位分配。3.从赫罗纳机场乘坐SK455航班前往斯德哥尔摩。座椅3A。4.从斯德哥尔摩机场乘SK22航班到纽约。22号门,7B座。行李将从你的最后一条腿转移过来

评论:

  • "SK455航班"的登机口丢失,因为输入没有登机口
  • "New York"被输出为"New York"(它来自数组值)
  • 我认为,与其使用数组,不如使用类