将数组的空值移动到最后一个位置

时间:2018-01-22 02:45:19

标签: php arrays api

我从一个外部API中提取一个数组,而且我在这里得到了一些 usort 的帮助,并且它将它推到了底部,并且空值在顶部。我尝试使用未设置,但这只是清空了我的整个 realArrival 值。

e.g。

  $fromThis = array(
      "realArrival": "",
      "realArrival": "Confirm. 06:18",
      "realArrival": "Confirm. 06:19"
  );

分为:

  $intoThis = array(
      "realArrival": "Confirm. 06:18",
      "realArrival": "Confirm. 06:19",
      "realArrival": ""
  );

以下是我尝试这样做的代码。我确定你在摇头,但现在就这样了。

        $url = 'http://apis.is/flight?language=en&type=arrivals';
        $json = file_get_contents($url);
        $results = json_decode($json, TRUE);
        $results = $results['results'];

        function cmp($a, $b) {
            return strcmp($a['realArrival'], $b['realArrival']);
        }

        //Sort Time   
        usort($results, "compare_time");
        function compare_time($a,$b) {
            $splitA= count(explode(' ',$a['realArrival']));
            $splitB= count(explode(' ',$a['realArrival']));
            if($splitA==2 && $splitB==2)
            {
                $first_time = strtotime(explode(' ',$a['realArrival'])[1]);
                $second_time = strtotime(explode(' ',$b['realArrival'])[1]);
                if($first_time==$second_time)
                {
                    return strcmp($b['realArrival'], $a['realArrival']);
                }
                return ($second_time < $first_time)  ? 1: 0;
            }
            return strcmp($a['realArrival'], $b['realArrival']);
        }

        echo '<table class="highlight bordered responsive-table grey darken-2 col s6">';
            echo "<tr>";
                echo '<th>Date</th>';
                echo '<th>Flight Number</th>';
                echo '<th>Airline</th>';
                echo '<th>From</th>';
                echo '<th>Schedule. Time</th>';
                echo '<th>Status</th>';
            echo "</tr>";
        foreach ($results as $item => $val) {
            echo "<tr>";
                echo '<td>'.$val['date'].'</td>';
                echo '<td>'.$val['flightNumber'].'</td>';
                echo '<td>'.$val['airline'].'</td>';
                echo '<td>'.$val['from'].'</td>';
                echo '<td>'.$val['plannedArrival'].'</td>';
                // HERE I TRIED TO TARGET THE EMPTY VALUES
                if ($val === "") {
                    unset($results[$item]);
                    $results[] = $val;
                    echo '<td style="font-weight: bold;">'.$val['realArrival'].'</td>';
                }

            echo '</tr>';
        }

1 个答案:

答案 0 :(得分:0)

我知道这可能看起来很笨拙,但你总是可以做点像......

$items_with_real_arrivals = array();
$items_without_real_arrivals = array();

foreach ($results as $item => $val) {
    if ($item[‘realArrival’] === "") { $items_without_real_arrivals.push($item); }
    else $items_with_real_arrivals.push($item);
}

$reordered_items = array();
for ($i=0; $i<count($items_with_real_arrivals); $i++) {
    $reordered_items.push($item);
}
for ($i=0; $i<count($items_without_real_arrivals); $i++) {
    $reordered_items.push($item);
}

foreach ($reordered_items as $item => $val) {
    echo "<tr>";
    echo '    <td>'.$val['date'].'</td>';
    echo '    <td>'.$val['flightNumber'].'</td>';
    echo '    <td>'.$val['airline'].'</td>';
    echo '    <td>'.$val['from'].'</td>';
    echo '    <td>'.$val['plannedArrival'].'</td>';
    echo '    <td style="font-weight:bold;">' . $val['realArrival'].'</td>';
    echo '</tr>';
}