preg_grep gibt keinen wert zurück

123user123

Mitglied
Hallo,

ich bin gerade dabei eine Website zu entwickeln mit welcher ich verschiedene Werte von Bilanzen usw. eines unternehmen ausgeben kann.
Dazu verwende ich die API von folgender Website:

Financial Modeling Prep - FinancialModelingPrep

Von der API bekomme ich Daten in json format (Ausschnitt davon):

{
"INTC": {
"Revenue": {
"2013-12": "52708",
"2014-12": "55870",
"2015-12": "55355",
"2016-12": "59387",
"2017-12": "62761",
"TTM": "62761"
},
"Cost of revenue": {
"2013-12": "21187",
"2014-12": "20261",
"2015-12": "20676",
"2016-12": "23196",
"2017-12": "23692",
"TTM": "23692"
},

Um es kurz zu fassen, in HTML habe ich drei inputs reingelegt mit denen der user sein Unternehmen, Wert und von welchem Jahr dieser angezeigt werden soll angeben kann.
Bis jetzt ist es mir gelungen jeweils einen Wert auszugeben, indem ich im Jahr genau "2014-12", "2015-12" usw. eingegeben habe.
Mein Ziel wäre es jedoch diese angabe zu geben, ohne müssen den genauen Monat extra raussuchen und angeben, da sich dieser von Unternehmen zu Unternehmen ändert.

Was ich bis jetzt versucht habe ist in PHP auf die Daten vom array mit preg_grep zuzugreifen und so formatieren das ich nur diesen Anteil bekomme der den Monat angibt.
Diesen dachte ich dann mit ".=" an meine Variable "$Y" anzuhängen, leider bekomme ich von preg_grep keinen wert zurück

Ausschnitt PHP:
<?php
if(isset($_GET['Ticker']))
{
$Ticker_Name = $_GET['Ticker']; //Hole unternehmenskürzel
$Value = $_GET['Value']; //Hole gewünschten Wert
$Y = $_GET['Y']; // Hole gewünscchtes Jahr
$url = file_get_contents('https://financialmodelingprep.com/api/financials/income-statement/' . $Ticker_Name); //Hole Daten von der API
$url = str_replace('<pre>','',$url); //Schneide <pre> tag aus
$json = json_decode($url, true); //wandle in array um
$Jahr = array_slice($json[$Ticker_Name][$Value],0,1); //schneide nur den ersten arrayanteil raus
$abschnitt = preg_grep('/[0-9]*/', $Jahr); //versuch mit regex gewünschten monat rauszufischen.

echo '
<div style="table;th;td">
<table align="center">
<tr>
<th align="center">Company</th>
<th align="center">Value</th>
<th align="center">Year</th>
<th align="center">In Dollar</th>
</tr>
<tr>
<td align="center">'.$Ticker_Name.'</td>
<td align="center">'.$Value.'</td>
<td align="center">'.$Y.'</td>
<td align="center">'.$json[$Ticker_Name][$Value][$Y].'</td>
</tr>
</table>
</div>
';
}
?>

Ich gebe den Code in den Anhang da ich leider nicht ganz verstanden habe wie man den hier richtig formatiert.

Vielen Dank im voraus.
 

Anhänge

Lösung
Auch das ist kein Problem, denn mit Regex lässt sich leicht das Jahr aus dem String extrahieren:
Code:
    $json = '
    { 
        "INTC":{ 
            "Revenue":{ 
                "2013-12":"52708",
                "2014-12":"55870",
                "2015-12":"55355",
                "2016-12":"59387",
                "2017-12":"62761",
                "TTM":"62761"
            },
            "Cost of revenue":{ 
                "2013-12":"21187",
                "2014-12":"20261",
                "2015-12":"20676",
                "2016-12":"23196",
                "2017-12":"23692",
                "TTM":"23692"
            }
        }
    }';
    $arr = json_decode($json, TRUE);
    $fromyear = '2014';
    $toyear = '2016'...
Vielen dank für die antwort.

@Sempervivum Ich habe den von dir geposteten code probiert, klarerweise auf meine Bedürfnisse geändert und es funktioniert nun.

Jetzt würde ich noch gerne fragen ob mir jemand den richtigen schubser geben könnte, den code so abzuändern, um es dem user zu ermöglichen die Daten von einem bestimmten Zeitraum, diese in einer Tabelle stecken und ausgeben.
 
Du meinst, der Benutzer soll ein Startjahr und ein Endejahr eingeben können und von diesem Zeitraum sollen die Daten dann angezeigt werden?
 
Auch das ist kein Problem, denn mit Regex lässt sich leicht das Jahr aus dem String extrahieren:
Code:
    $json = '
    { 
        "INTC":{ 
            "Revenue":{ 
                "2013-12":"52708",
                "2014-12":"55870",
                "2015-12":"55355",
                "2016-12":"59387",
                "2017-12":"62761",
                "TTM":"62761"
            },
            "Cost of revenue":{ 
                "2013-12":"21187",
                "2014-12":"20261",
                "2015-12":"20676",
                "2016-12":"23196",
                "2017-12":"23692",
                "TTM":"23692"
            }
        }
    }';
    $arr = json_decode($json, TRUE);
    $fromyear = '2014';
    $toyear = '2016';
    $pattern = "/^(\d{4})-/";
    $costs = [];
    foreach ($arr['INTC']['Cost of revenue'] as $key=>$cost) {
        $result = preg_match($pattern, $key, $matches);
        if ($result) {
            $year = $matches[1];
            if ($year >= $fromyear && $year <= $toyear)
            $costs[] = ['Jahr'=>$year, 'Kosten'=>$cost];
        }
    }
    var_dump($arr);
    var_dump($costs);
Aus dem Array $costs kannst Du dann die Tabelle aufbauen, wie Du sie brauchst.
 
Lösung
Zurück