• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP / JSON - leeren String überspringen

sveka

Mitglied
Hallo, ich arbeite aktuell mit JSON. Da bin ich allerdings noch recht unbedacht. Daher bräuchte ich mal wieder einen Denkanstoss.

Folgende Problemstellung.

Ich habe folgende JSON Struktur.

Code:
array(2) {
  ["@odata.context"]=>
  string(59) "https://graph.microsoft.com/v1.0/$metadata#directoryObjects"
  ["value"]=>
  array(25) {
    [0]=>
    array(9) {
      ["@odata.type"]=>
      string(21) "#microsoft.graph.user"
      ["id"]=>
      string(36) "WERT"
      ["businessPhones"]=>
      array(0) {
      }
      ["displayName"]=>
      string(12) "WERT"
      ["givenName"]=>
      string(5) "WERT"
      ["mail"]=>
      string(21) "WERT"
      ["preferredLanguage"]=>
      string(5) "de-DE"
      ["surname"]=>
      string(6) "WERT"
      ["userPrincipalName"]=>
      string(21) "WERT"
    }

Das auslesen und ansprechen klappt super. :) Wie aber kann ich beim auslesen feststellen, ob es einen Zweig überhaupt gibt? Denn in der JSON gibt es nicht bei allen Datensätzen den Zweig ["businessPhones"] bzw. ist er leer.

Bei der normalen Ausgabe habe ich mir mit "!isset" beholfen. Dies klappt auch ganz gut. Aber spätestens wenn ich die Daten in die Datenbank übernehmen will, meckert er bei dem Zweig wie folgt:

Notice: Undefined offset: 3 inD:\xampp\htdocs\independa\intern\json_auslesen.phpon line45

Dies aber nur, wenn er leer oder nicht vorhanden ist. In die Datenbank trägt er die vorhanden Werte sauber ein. Wie kann ich diese Fehlermeldung abstellen?

DANKE
 
Werbung:
isset ist schon richtig, aber da du uns deinen Quellcode verschweigst .....
 
Den möchte ich natürlich nicht verschweigen. Ich habe es bisher wie folgt versucht.

Das ist der Teil vom businessPhones, welcher Probleme macht.

Code:
$json_file = file_get_contents("../json/import/mitarbeiter.json");
$JSON = json_decode($json_file, true);

$anzahl_inhalte = count($JSON['value']);

$i = 0;
while($i < $anzahl_inhalte) 
{

            ###################### businessPhones ############################
            if(!isset($JSON['value'][$i]['businessPhones'][0]))
            {
                echo "<td><input type='hidden' value='' name='businessPhones[]'></td>";
            }
            else
            {
            ?>
            <td><input type="hidden" value="<?php echo $JSON['value'][$i]['businessPhones'][0]; ?>" name="businessPhones[]"><?php echo $JSON['value'][$i]['businessPhones'][0]; ?></td> 
            <?php
            }
            } // Ende while
            ?>

Ich gebe es in einer Tabelle aus, daher das "hidden" als input-field für ein FORM.

Dies ist der Teil nach dem Absenden des FORMs.

Code:
if(isset($_POST['json_nach_db']))
{
    include('../inc/db_config.php');
    $i = 0;
    $anzahl_i = $_POST['anzahl'];

    while($i < $anzahl_i)
    {
        $ms_id = $_POST['id_ms'][$i]; 
        $displayName = $_POST['displayname'][$i];
        $givenName = $_POST['givenName'][$i];
        $surname = $_POST['surname'][$i];
        $mail = $_POST['mail'][$i];
        $mobilePhone = $_POST['mobilePhone'][$i];
        $preferredLanguage = $_POST['preferredLanguage'][$i];
        $businessPhones = $_POST['businessPhones'][$i];
        $officeLocation = $_POST['officeLocation'][$i];
        $jobTitle = $_POST['jobTitle'][$i];
        $userPrincipalName = $_POST['userPrincipalName'][$i];

        // DATEN in der Schleife eintragen
        $sql = $db1->Prepare("INSERT INTO mitarbeiter_ms_abgleich (id_ms, businessPhones , displayName, givenName, jobTitle , mail , mobilePhone , officeLocation , preferredLanguage , surname, userPrincipalName , timestamp) 
        VALUES ('$ms_id' , '$businessPhones' , '$displayName' , '$givenName' , '$jobTitle' , '$mail' , '$mobilePhone' , '$officeLocation' , '$preferredLanguage' , '$surname' , '$userPrincipalName' , NOW() )");
       
 $sql->execute();
    $i++;
    }
}

Es funktioniert wie gesagt bei ALLEN ausser bei businessPhones. Da bringt er o.g. Fehlermeldung.

Notice: Undefined offset: 3 inD:\xampp\htdocs\independa\intern\json_auslesen.php on line45

Vielleicht habt ihr eine Idee.
 
Werbung:
Ich vermute mal, es geht um
PHP:
$JSON['value'][$i]['businessPhones'][0]
Dann stellt sich doch die Frage, ob
PHP:
$JSON['value'][$i]
überhaupt existiert.
 
Dann werde ich das mal mit überprüfen
Würde ich nicht machen, sondern die while-Schleife durch eine foreach-Schleife ersetzen, dann kann es dir egal sein, ob $JSON['value'][$i]
existiert.
PHP:
foreach($JSON['value'] as $value)
{
  ###################### businessPhones ############################
  if(!isset($value['businessPhones'][0]))
      echo "<td><input type='hidden' value='' name='businessPhones[]'></td>";
  else
    echo "<td><input type='hidden' value='" . $value['businessPhones'][0]. "' name='businessPhones[]'>" . $value['businessPhones'][0]; . "</td>"
}
 
Werbung:
Ich nutze grundsätzlich gerne while-Schleifen. Warum kann ich gar nicht genau sagen. ;)

Aber ich werde es mit foreach probieren. Ich danke Dir.
 
Werbung:
Zurück
Oben