Ok, wenn man mal nicht stur nach den Zahlen geht, kommt das tatsächlich hin. Gemeint sind alle Stationen zwischen Start und Ende, ganz egal, in welchem Bereich die id liegt:
PHP
$aJsonFiles = glob( './jsonFiles/*.json' );
$aResults = [];
foreach ( $aJsonFiles as $file ) {
$jData = json_decode( file_get_contents($file) );
$iStart = $jData->startStation;
$iEnd = $jData->endStation;
$iStartIndex = array_keys( array_filter($jData->stations, function($j) use ($iStart) { return $j->id == $iStart; }) )[0];
$iEndIndex = array_keys( array_filter($jData->stations, function($j) use ($iEnd) { return $j->id == $iEnd; }) )[0];
$bIsForward = $iStartIndex < $iEndIndex;
$iOffset = abs( $iEndIndex - $iStartIndex );
$aStations = array_slice( $jData->stations, ($bIsForward ? $iStartIndex : $iEndIndex), $iOffset );
$aDurations = array_map( function($s) { return isset($s->durationToNext) ? (integer)$s->durationToNext : 0; }, $aStations );
$aResults[] = basename($file) . PHP_EOL . 'Richtung: ' . ($bIsForward ? 'vor' : 'zurück' ) . ' => ' . array_sum( $aDurations ) . 's';
}
echo '<pre>' . implode( '</pre><pre>', $aResults ) . '</pre>';
Alles anzeigen