Hier ist ein praktisches Beispiel (es gibt bereits mehrere gute). Ich wollte nur eine hinzufügen, die für fast jeden Entwickler nützlich ist.
Irgendwann müssen Entwickler ein Objekt wie bei einer Antwort von einer API oder einem Objekt- oder Array-Typ analysieren.
Diese Funktion wird zunächst aufgerufen, um ein Objekt zu analysieren, das möglicherweise nur Parameter enthält. Was ist jedoch, wenn das Objekt auch andere Objekte oder Arrays enthält? Dies muss behoben werden, und zum größten Teil tut dies die Grundfunktion bereits, sodass die Funktion sich selbst erneut aufruft (nachdem bestätigt wurde, dass der Schlüssel oder Wert entweder ein Objekt oder ein Array ist) und dieses neue Objekt oder Array analysiert. Letztendlich wird eine Zeichenfolge zurückgegeben, die jeden Parameter in einer Zeile zur besseren Lesbarkeit für sich erstellt. Sie können die Werte jedoch genauso einfach in einer Protokolldatei protokollieren oder in eine Datenbank oder was auch immer einfügen.
Ich habe den $prefix
Parameter hinzugefügt , um das übergeordnete Element zur Beschreibung der Endvariablen zu verwenden, damit wir sehen können, worauf sich der Wert bezieht. Es enthält keine Dinge wie Nullwerte, aber dies kann aus diesem Beispiel geändert werden.
Wenn Sie das Objekt haben:
$apiReturn = new stdClass();
$apiReturn->shippingInfo = new stdClass();
$apiReturn->shippingInfo->fName = "Bill";
$apiReturn->shippingInfo->lName = "Test";
$apiReturn->shippingInfo->address1 = "22 S. Deleware St.";
$apiReturn->shippingInfo->city = "Chandler";
$apiReturn->shippingInfo->state = "AZ";
$apiReturn->shippingInfo->zip = 85225;
$apiReturn->phone = "602-312-4455";
$apiReturn->transactionDetails = array(
"totalAmt" => "100.00",
"currency" => "USD",
"tax" => "5.00",
"shipping" => "5.00"
);
$apiReturn->item = new stdClass();
$apiReturn->item->name = "T-shirt";
$apiReturn->item->color = "blue";
$apiReturn->item->itemQty = 1;
und verwenden:
var_dump($apiReturn);
es wird zurückkehren:
Objekt (stdClass) # 1 (4) {["Versandinformationen"] => Objekt (stdClass) # 2 (6) {["fName"] => Zeichenfolge (4) "Rechnung" ["lName"] => Zeichenfolge ( 4) "Test" ["Adresse1"] => Zeichenfolge (18) "22 S. Deleware St." ["city"] => string (8) "Chandler" ["state"] => string (2) "AZ" ["zip"] => int (85225)} ["phone"] => string (12 ) "602-312-4455" ["transactionDetails"] => Array (4) {["totalAmt"] => Zeichenfolge (6) "100.00" ["Währung"] => Zeichenfolge (3) "USD" [" Steuer "] => Zeichenfolge (4)" 5,00 "[" Versand "] => Zeichenfolge (4)" 5,00 "} [" Artikel "] => Objekt (stdClass) # 3 (3) {[" Name "] = > string (7) "T-Shirt" ["Farbe"] =>
und hier ist der Code, um ihn in einen String mit einem Zeilenumbruch für jeden Parameter zu analysieren:
function parseObj($obj, $prefix = ''){
$stringRtrn = '';
foreach($obj as $key=>$value){
if($prefix){
switch ($key) {
case is_array($key):
foreach($key as $k=>$v){
$stringRtrn .= parseObj($key, $obj);
}
break;
case is_object($key):
$stringRtrn .= parseObj($key, $obj);
break;
default:
switch ($value) {
case is_array($value):
$stringRtrn .= parseObj($value, $key);
break;
case is_object($value):
$stringRtrn .= parseObj($value, $key);
break;
default:
$stringRtrn .= $prefix ."_". $key ." = ". $value ."<br>";
break;
}
break;
}
} else {
switch($key){
case is_array($key):
$stringRtrn .= parseObj($key, $obj);
break;
case is_object($key):
$stringRtrn .= parseObj($key, $obj);
break;
default:
switch ($value) {
case is_array($value):
$stringRtrn .= parseObj($value, $key);
break;
case is_object($value):
$stringRtrn .= parseObj($value, $key);
break;
default:
$stringRtrn .= $key ." = ". $value ."<br>";
break;
}
}
}
}
return $stringRtrn;
}
Dadurch wird das Objekt wie folgt zurückgegeben:
shippingInfo_fName = Bill
shippingInfo_lName = Test
shippingInfo_address1 = 22 S. Deleware St.
shippingInfo_city = Chandler
shippingInfo_state = AZ
shippingInfo_zip = 85225
phone = 602-312-4455
transactionDetails_totalAmt = 100.00
transactionDetails_currency = USD
transactionDetails_tax = 5.00
transactionDetails_shipping = 5.00
item_name = T-shirt
item_color = blue
item_itemQty = 1
Ich habe die verschachtelten switch- Anweisungen ausgeführt, um Verwechslungen mit zu vermeiden if . . . ifelse . . . else
, aber es war fast genauso lang. Wenn es hilft, fragen Sie einfach nach den if-Bedingungen und ich kann sie für diejenigen einfügen, die sie benötigen.