2015-01-31 4 views
0

Это использует API Wolfram Alpha для получения самолетов поблизости, а затем отображает его. Как удалить направление плоскости и фразу «Наклонное расстояние»?Фильтрация строковых массивов в PHP

Мой код (PHP):

<html> 
<head> 
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'> 
<style> 
body { 
    background-color: rgba(255, 255, 255, 0.3); 
    font-family: 'Open Sans', sans-serif; 
    text-align:center; 
} 
</style> 
</head> 
     <?php 
    $url = 'http://api.wolframalpha.com/v2/query?input=planes+seen+from+dallas&appid=2UJ62E-Q6RT3T89P8'; 

    $parser = new XMLReader; 
    $parser->open($url); 

    while ($parser->read()) { 
     if ($parser->nodeType === XMLReader::ELEMENT) { 

      while ($parser->name === 'pod' && $parser->getAttribute('title') !== 'Result') 
       $parser->next('pod'); // jump to the next pod node 

      if ($parser->name === 'plaintext') { 
       $str = $parser->readString(); 
       $parser->close();  
       break; 
      } 
     } 
    } 

    $lines = explode("\n", $str); 
    $result = array(); 

    foreach ($lines as $line) { 
     $fields = explode(' | ', $line); 
     $flight = array_shift($fields); 
     $flight = $flight . "<hr>"; //DELETE IF DOESN'T WORK 

     if ($flight === '') 
      $cols = $fields; 
     elseif (isset($fields[1])) { 
      $result[$flight][$cols[0]] = $fields[0]; 
      $result[$flight][$cols[1]] = $fields[1]; 
     } 
    } 

    foreach($result as $key=>$value) 
    { 
     echo $key; 
     foreach($value as $value1){ 

     echo $value1; 
echo " &nbsp;"; 
} 
    } 

Пример выходных данных ниже:

slant distance ENY flight 3278 
14 miles NNW Frontier Airlines flight 72 
44 miles N American Airlines flight 1241 
15 miles NW American Airlines flight 396 
23 miles W Atlantic Southeast Airlines flight 6104 
49 miles SSE 

То, что я хочу, чтобы это выглядело как:

Frontier flight 3278 
Airlines flight 72 
American Airlines flight 1241 
American Airlines flight 396 
Atlantic Southeast Airlines flight 6104 
+0

API-интерфейс не предлагают выходные параметры для данных, например csv, json, xml и т. д.? – chris85

+0

Да, в XML, где $ url - это url для образца api output. –

+0

Да, я вижу это, но данные, которые вы хотите, на самом деле не в XML. Все это является открытым текстом, что делает его гораздо более восприимчивым к ошибкам. От '14 миль В Frontier Airlines рейса 72' вы только хотите ' 14 миль Frontier Airlines рейса 72' и удалить одно вхождение 'наклонное расстояние', это правильно? – chris85

ответ

2

Как это?

foreach($value as $value1){ 
     if(preg_match('~(flight\s+\d+)~mis', $value1, $flightdata) || preg_match('~\s+(.*?\s+Airlines)\s+~mis', $value1, $airlinedata)) { 
      if(!empty($flightdata[1])) { 
       echo $flightdata[1]; 
      } 
      if(!empty($airlinedata[1])) { 
       echo $airlinedata[1]; 
      } 
      echo $value1 . ' &nbsp;' . "\n"; 
     } 

Вы не указали час в своем желаемом выходе, но это должно быть достаточно легко для вас.

Обновлено (непроверенные, потому что я удалил файл после ответа):

<html>  
<head>  
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>  
<style> 
    body { 
    background-color: rgba(255, 255, 255, 0.3); 
    font-family: 'Open Sans', sans-serif; 
    text-align:center; 
    } 
</style> 
</head> 
<?php 
$url = 'http://api.wolframalpha.com/v2/query?input=planes+seen+from+dallas&appid=2UJ62E-Q6RT3T89P8'; 
$parser = new XMLReader; 
$parser->open($url); 
while ($parser->read()) { 
    if ($parser->nodeType === XMLReader::ELEMENT) { 
     while ($parser->name === 'pod' && $parser->getAttribute('title') !== 'Result') { 
      $parser->next('pod'); // jump to the next pod node 
     } 
     if ($parser->name === 'plaintext') { 
      $str = $parser->readString(); 
      $parser->close(); 
      break; 
     } 
    } 
} 
$lines = explode("\n", $str); 
$result = array(); 
foreach ($lines as $line) { 
    $fields = explode(' | ', $line); 
    $flight = array_shift($fields); 
    $flight = $flight . "<hr>"; //DELETE IF DOESN'T WORK 
    if ($flight === '') { 
     $cols = $fields; 
    } elseif (isset($fields[1])) { 
     $result[$flight][$cols[0]] = $fields[0]; 
     $result[$flight][$cols[1]] = $fields[1]; 
    } 
} 
foreach($result as $key=>$value) { 
    foreach($value as $value1){ 
     if(preg_match('~(flight\s+\d+)~mis', $value1, $flightdata) || preg_match('~\s+(.*?\s+Airlines)\s+~mis', $value1, $airlinedata)) { 
      if(!empty($flightdata[1])) { 
       echo $flightdata[1]; 
      } 
      if(!empty($airlinedata[1])) { 
       echo $airlinedata[1]; 
      } 
      echo $value1 . ' &nbsp;' . "\n"; 
     } 
    } 
} 
?> 
+0

Я проверю, thx –

+0

, похоже, не работает, PLZ дайте мне окончательный код для меня, чтобы принять ответ. Thx –

+0

Plz посмотреть на редактирование –

0

Olivr3000 здесь является обновление. Я попытался отредактировать код Chris85, чтобы опубликовать это вчера, но мое редактирование не опубликовано. Я изменил окончательный Еогеасп для вывода данных на самолет, как вы просили

<html>  
<head>  
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>  
<style> 
    body { 
    background-color: rgba(255, 255, 255, 0.3); 
    font-family: 'Open Sans', sans-serif; 
    text-align:center; 
    } 
</style> 
</head> 
<?php 
$url = 'http://api.wolframalpha.com/v2/query?input=planes+seen+from+dallas&appid=2UJ62E-Q6RT3T89P8'; 
$parser = new XMLReader; 
$parser->open($url); 
while ($parser->read()) { 
    if ($parser->nodeType === XMLReader::ELEMENT) { 
     while ($parser->name === 'pod' && $parser->getAttribute('title') !== 'Result') { 
      $parser->next('pod'); // jump to the next pod node 
     } 
     if ($parser->name === 'plaintext') { 
      $str = $parser->readString(); 
      $parser->close(); 
      break; 
     } 
    } 
} 
$lines = explode("\n", $str); 
$result = array(); 
foreach ($lines as $line) { 
    $fields = explode(' | ', $line); 
    $flight = array_shift($fields); 
    $flight = $flight . "<hr>"; //DELETE IF DOESN'T WORK 
    if ($flight === '') { 
     $cols = $fields; 
    } elseif (isset($fields[1])) { 
     $result[$flight][$cols[0]] = $fields[0]; 
     $result[$flight][$cols[1]] = $fields[1]; 
    } 
} 
foreach($result as $key=>$value) { 
    foreach($value as $value1){ 
     if(preg_match('~(flight\s+\d+)~mis', $value1, $flightdata) || preg_match('~\s+(.*?\s+Airlines)\s+~mis', $value1, $airlinedata)) { 
      if(!empty($flightdata[1])) { 
       echo $flightdata[1]; 
      } 
      if(!empty($airlinedata[1])) { 
       echo $airlinedata[1]; 
      } 
      echo $value1 . ' &nbsp;' . "\n"; 
     } 
    } 
} 
?> 

, который дает этот HTML результат

<html>  
<head>  
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>  
<style> 
    body { 
    background-color: rgba(255, 255, 255, 0.3); 
    font-family: 'Open Sans', sans-serif; 
    text-align:center; 
    } 
</style> 
</head> 
American Airlines flight 1046<BR>N929FD<BR> 
ENY flight 3238<BR> 
Southwest Airlines flight 2477<BR> 
American Airlines flight 2352<BR> 
+0

Thx, я проверю! :) –

+0

Все еще ничего не дает! –

+0

Определенно работает. Вот прямая ссылка на этот код. http://hdreports.com/test/testjson.php –

2

olivr3000,

Каким-то образом мне удалось ввернуть мой выбор выше и Бесполезный 't включить код, который, наконец, работал для моего тестирования.

Вот код с моими правками Вы можете увидеть его в действии на http://hdreports.com/test/testjson.php и источник http://hdreports.com/test/testjson.txt

Здесь и она работает. Извините за задержку в получении его здесь.

<html>  
<head>  
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>  
<style> 
    body { 
    background-color: rgba(255, 255, 255, 0.3); 
    font-family: 'Open Sans', sans-serif; 
    text-align:center; 
    } 
</style> 
</head> 
<?php 
$url = 'http://api.wolframalpha.com/v2/query?input=planes+seen+from+dallas&appid=2UJ62E-Q6RT3T89P8'; 
$parser = new XMLReader; 
$parser->open($url); 
while ($parser->read()) { 
    if ($parser->nodeType === XMLReader::ELEMENT) { 
     while ($parser->name === 'pod' && $parser->getAttribute('title') !== 'Result') { 
      $parser->next('pod'); // jump to the next pod node 
     } 
     if ($parser->name === 'plaintext') { 
      $str = $parser->readString(); 
      $parser->close(); 
      break; 
     } 
    } 
} 
$lines = explode("\n", $str); 
$result = array(); 
foreach ($lines as $line) { 
    $fields = explode(' | ', $line); 
    $flight = array_shift($fields); 

    if ($flight === '') { 
     $cols = $fields; 
    } elseif (isset($fields[1])) { 
     $result[$flight][$cols[0]] = $fields[0]; 
     $result[$flight][$cols[1]] = $fields[1]; 
    } 
} 
foreach($result as $key=>$value) { 
    echo $key.'<BR>'; 
} 
?> 
+0

Спасибо, много! –

0

Ваша структура данных изменилась в какой-то момент между последним ответом и этим. Если это будет продолжаться, это никогда не сработает.

<?php 
$url = 'http://api.wolframalpha.com/v2/query?input=planes+seen+from+dallas&appid=2UJ62E-Q6RT3T89P8'; 
$parser = new XMLReader; 
$parser->open($url); 
while ($parser->read()) { 
    if ($parser->nodeType === XMLReader::ELEMENT) { 
     while ($parser->name === 'pod' && $parser->getAttribute('title') !== 'Result') { 
      $parser->next('pod'); // jump to the next pod node 
     } 
     if ($parser->name === 'plaintext') { 
      $str = $parser->readString(); 
      $parser->close(); 
      break; 
     } 
    } 
} 
$lines = explode("\n", $str); 
foreach ($lines as $line) { 
    if(preg_match('~^(.*?)\s+(flight\s+\d+)~', $line, $matches)){ 
     echo $matches[1] . ' ' . $matches[2] . "\n"; 
    } 
} 
?> 

Выход через мою оболочку ....

United Airlines flight 1274 
Delta Air Lines flight 2389 
Mesa Airlines flight 3734 
United Airlines flight 569 
Shuttle America flight 3473 
United Airlines flight 1274 
Delta Air Lines flight 2389 
Mesa Airlines flight 3734 
United Airlines flight 569 
Shuttle America flight 3473 
Смежные вопросы