preg_grep gibt keinen wert zurück

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

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

  • Stockwatcher.zip
    3,1 KB · Aufrufe: 0

123user123

Mitglied
Da ich diese nicht wirklich in betracht gezogen habe.

Habe diese dafür gerade eben probiert, bei:
"json_last_error()" bekomme ich "0" heraus
"json_last_error_msg()" bekomme ich "No error"
 

123user123

Mitglied
Tut mir leid wenn ich da ein wenig auf der langen Leitung hänge, ist aber json_encode nicht dazu da einen PHP string in ein json array zu konvertieren?
 

lordkimahri

Grünschnabel
Der Fehler ist mir auch aufgefallen, mein denkfehler. Wenn du dein jsonarray per var_dump ausgeben lässt müsstest du den genauen aufbau sehen können.
Könntest du die Ausgabe hier mal zeigen, dann könnte man besser helfen.
 

lordkimahri

Grünschnabel
ok, ich verstehe die Variable ausgabe nicht ganz. Ist dies der Zielmonat der ausgegeben werden soll?

versuch mal folgendes:

Code:
echo '<pre>';
print_r($arr);
echo '</pre>';
 

123user123

Mitglied
Nun bekomme ich das:

Array
(
[2013-09] => 170910
)

Hier bekomme ich die einnahmen die das unternehmen Apple im Jahr 2013, bei ende september gemacht hat.
Um diesen Wert zu bekommen, muss ich in der eingabe "2013-09" eingeben. Das Ziel ist es aber nur "2013", "2014" oder "2015" eingeben zu können.
Der Grund dafür ist das jedes Unternehmen selbst entscheidet wann ein Geschäftsjahr vollendet ist, sich dieses ende von Unternehmen zu Unternehmen ändert und der User soll nicht suchen müssen.
 

Sempervivum

Erfahrenes Mitglied
Dieser Code sucht die Kosten für ein bestimmtes Jahr heraus, ohne dass man den Monat angeben muss:
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);
    $year = '2015';
    $pattern = "/^" . $year . "/";
    foreach ($arr['INTC']['Cost of revenue'] as $key=>$cost) {
        if (preg_match($pattern, $key)) {
            $costfound = $cost;
            break;
        }
    }
    var_dump($arr);
    var_dump($costfound);
 
Zuletzt bearbeitet:
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…