2016-10-28 3 views
0

EDIT: Der XML-Gehalt:Split-Daten aus dem Array in PHP

<params PartnerCD="7882" OrderID="6081833" Timestamp="2016-10-28 05:57:47.303" StatusCD="6" StatusName="Approved - PCB" ChannelCD="2" ChannelName="WEB" OfficeCD="0" OfficeName="All Offices" UserNumber="0" UserName="PnPDBUser" PmtDeviceType="Visa" PmtDeviceLast4="1111" FirstName="test" LastName="t" Address1="test" Address2="NA" City="test" Region="KS" PostalCode="32534" CountryCode="US" PhoneNumber="2344214231" EmailAddress="[email protected]" DateOfBirth="" PmtNotes="" OrderTypeCD="1" OrderTypeName="Purchase" OriginalOrderID="NULL" TotalFeeAmount="2.00" TotalAmountPaid="3.00" ><product AccountNo="207" LineItemID="138160" Amount="1.00" ProductID="19077" ProductName="Services" Quantity="1" UserID="137" FullName="Suhani Patel" Date="2016-10-28" /></params> 

I das Array Objekt haben, wie folgt:

$example="SimpleXMLElement Object ([@attributes] => Array ([PartnerCD] => 7882 [OrderID] => 6081832 [Timestamp] => 2016-10-28 05:35:24.000 [StatusCD] => 6 [StatusName] => Approved - PCB [ChannelCD] => 2 [ChannelName] => WEB [OfficeCD] => 0 [OfficeName] => All Offices [UserNumber] => 0 [UserName] => PnPDBUser [PmtDeviceType] => Visa [PmtDeviceLast4] => 1111 [FirstName] => test [LastName] => t [Address1] => test [Address2] => NA [City] => test [Region] => IA [PostalCode] => 32534 [CountryCode] => US [PhoneNumber] => 2344214231 [EmailAddress] => [email protected] [DateOfBirth] => [PmtNotes] => [OrderTypeCD] => 1 [OrderTypeName] => Purchase [OriginalOrderID] => NULL [TotalFeeAmount] => 2.00 [TotalAmountPaid] => 3.00) [product] => SimpleXMLElement Object ([@attributes] => Array ([AccountNo] => 208 [LineItemID] => 138159 [Amount] => 1.00 [ProductID] => 19077 [ProductName] => Law Library Services [Quantity] => 1 [UserID] => 137 [FullName] => Suhani Patel [Date] => 2016-10-28)))"; 

Um die Anordnung zu holen, und auf jede zuweisen Objekt (für Datenbankoperationen) verwende ich den folgenden Code:

foreach ($example as $mainarray) 
{ 

$desc =$mainarray["PartnerCD"]; 
echo $desc; 

} 

Aber ich bekomme den folgenden Fehler:

Warning: Invalid argument supplied for foreach() in /home/www/www/test/sucess.php on line 2

Gibt es eine andere Möglichkeit, es zu lösen.

Vielen Dank im Voraus.

+3

'$ Beispiel =" SimpleXMLElement Objekt ... ' sicherlich nicht schaffen, ein Objekt, sondern ein String. Sie können nicht einen String mit einer 'foreach' Schleife durchlaufen ... – arkascha

+0

und' $ mainarray' und '$ mainArray' sind zwei verschiedene Dinge ... – arkascha

+0

Wie bist du zu dieser Saite gekommen? – RamRaider

Antwort

1

So wollen Sie ein Array erhalten wie

'PartnerCD' => 7882, 
'OrderID' => 6081832, 
... 

UPDATE:

$xmlstr = '<params PartnerCD="7882" OrderID="6081833" Timestamp="2016-10-28 05:57:47.303" StatusCD="6" StatusName="Approved - PCB" ChannelCD="2" ChannelName="WEB" OfficeCD="0" OfficeName="All Offices" UserNumber="0" UserName="PnPDBUser" PmtDeviceType="Visa" PmtDeviceLast4="1111" FirstName="test" LastName="t" Address1="test" Address2="NA" City="test" Region="KS" PostalCode="32534" CountryCode="US" PhoneNumber="2344214231" EmailAddress="[email protected]" DateOfBirth="" PmtNotes="" OrderTypeCD="1" OrderTypeName="Purchase" OriginalOrderID="NULL" TotalFeeAmount="2.00" TotalAmountPaid="3.00" ><product AccountNo="207" LineItemID="138160" Amount="1.00" ProductID="19077" ProductName="Services" Quantity="1" UserID="137" FullName="Suhani Patel" Date="2016-10-28" /></params>'; 
$xml = new SimpleXMLElement($xmlstr); 
foreach ($xml->attributes() as $key=>$val) { 
    // if($key == "PartnerCD") <-- this will print just PartnerCD 
    echo $key. ": " .$val. "<br>"; 
} 
foreach ($xml->product->attributes() as $key=>$val) { 
    echo $key. ": " .$val. "<br>"; 
} 
+0

ja gleich. Gibt es eine einfachere Methode? –

1

Scheint, wie Sie das Ergebnis der Ausgabe des Wertes des SimpleXMLElement Equivalent kopiert. In jedem Fall ist hier, was Sie beachten müssen möglicherweise:

$xml = new SimpleXMLElement('<params PartnerCD="7882" OrderID="6081833" Timestamp="2016-10-28 05:57:47.303" StatusCD="6" StatusName="Approved - PCB" ChannelCD="2" ChannelName="WEB" OfficeCD="0" OfficeName="All Offices" UserNumber="0" UserName="PnPDBUser" PmtDeviceType="Visa" PmtDeviceLast4="1111" FirstName="test" LastName="t" Address1="test" Address2="NA" City="test" Region="KS" PostalCode="32534" CountryCode="US" PhoneNumber="2344214231" EmailAddress="[email protected]" DateOfBirth="" PmtNotes="" OrderTypeCD="1" OrderTypeName="Purchase" OriginalOrderID="NULL" TotalFeeAmount="2.00" TotalAmountPaid="3.00" ><product AccountNo="207" LineItemID="138160" Amount="1.00" ProductID="19077" ProductName="Services" Quantity="1" UserID="137" FullName="Suhani Patel" Date="2016-10-28" /></params>'); 

    var_dump($xml->attributes()['PartnerCD']); 
    var_dump($xml->attributes()['PmtDeviceType']); 
    var_dump($xml->attributes()['EmailAddress']); 
    var_dump($xml->attributes()['PhoneNumber']); 

Variant 2:

$xml = new SimpleXMLElement(' <api> 
             <params PartnerCD="7882" OrderID="6081833" Timestamp="2016-10-28 05:57:47.303" StatusCD="6" StatusName="Approved - PCB" ChannelCD="2" ChannelName="WEB" OfficeCD="0" OfficeName="All Offices" UserNumber="0" UserName="PnPDBUser" PmtDeviceType="Visa" PmtDeviceLast4="1111" FirstName="test" LastName="t" Address1="test" Address2="NA" City="test" Region="KS" PostalCode="32534" CountryCode="US" PhoneNumber="2344214231" EmailAddress="[email protected]" DateOfBirth="" PmtNotes="" OrderTypeCD="1" OrderTypeName="Purchase" OriginalOrderID="NULL" TotalFeeAmount="2.00" TotalAmountPaid="3.00" ><product AccountNo="207" LineItemID="138160" Amount="1.00" ProductID="19077" ProductName="Services" Quantity="1" UserID="137" FullName="Suhani Patel" Date="2016-10-28" /></params> 
             <params PartnerCD="7882" OrderID="6081833" Timestamp="2016-10-28 05:57:47.303" StatusCD="6" StatusName="Approved - PCB" ChannelCD="2" ChannelName="WEB" OfficeCD="0" OfficeName="All Offices" UserNumber="0" UserName="PnPDBUser" PmtDeviceType="Visa" PmtDeviceLast4="1111" FirstName="test" LastName="t" Address1="test" Address2="NA" City="test" Region="KS" PostalCode="32534" CountryCode="US" PhoneNumber="2344214231" EmailAddress="[email protected]" DateOfBirth="" PmtNotes="" OrderTypeCD="1" OrderTypeName="Purchase" OriginalOrderID="NULL" TotalFeeAmount="2.00" TotalAmountPaid="3.00" ><product AccountNo="207" LineItemID="138160" Amount="1.00" ProductID="19077" ProductName="Services" Quantity="1" UserID="137" FullName="Suhani Patel" Date="2016-10-28" /></params> 
            </api>'); 

    foreach($xml->children() as $child){ 
     /**@var SimpleXMLElement $child*/ 
     echo ($child->xpath("@PartnerCD")[0])         . "<br />"; 
     echo (date("d/m/Y H:i:s", strtotime($child->xpath('@Timestamp')[0]))) . "<br />"; 
     echo ($child->attributes()['OrderID'])         . "<br />"; 
     echo ($child->attributes()['PhoneNumber'])        . "<br />"; 
     echo ($child->attributes()['EmailAddress'])        . "<br /><br />"; 
    } 
0
$xml = <<<XML 
<params PartnerCD="7882" OrderID="6081833" 
Timestamp="2016-10-28 05:57:47.303" StatusCD="6" 
    StatusName="Approved - PCB" ChannelCD="2" 
    ChannelName="WEB" OfficeCD="0" OfficeName="All Offices" 
    UserNumber="0" UserName="PnPDBUser" 
    PmtDeviceType="Visa" PmtDeviceLast4="1111" 
    FirstName="test" LastName="t" Address1="test" 
    Address2="NA" City="test" Region="KS" 
    PostalCode="32534" CountryCode="US" 
    PhoneNumber="2344214231" EmailAddress="[email protected]" 
    DateOfBirth="" PmtNotes="" OrderTypeCD="1" OrderTypeName="Purchase" 
    OriginalOrderID="NULL" TotalFeeAmount="2.00" TotalAmountPaid="3.00" > 
     <product AccountNo="207" LineItemID="138160" Amount="1.00" ProductID="19077" ProductName="Services" Quantity="1" UserID="137" FullName="Suhani Patel" Date="2016-10-28" /> 
</params> 
XML; 

$example = simplexml_load_string($xml); 
foreach ($example as $mainArray) { 
    foreach ($mainArray->attributes() as $key => $attribute) { 
     $attributesPerDataset[$key] = (string)$attribute; 
    } 
    $attributes[] = $attributesPerDataset; 
} 
echo '<pre>'; 
var_dump($attributes); 
exit; 

Daraus ergibt sich:

array(1) { 
    [0]=> 
    array(9) { 
    ["AccountNo"]=> 
    string(3) "207" 
    ["LineItemID"]=> 
    string(6) "138160" 
    ["Amount"]=> 
    string(4) "1.00" 
    ["ProductID"]=> 
    string(5) "19077" 
    ["ProductName"]=> 
    string(8) "Services" 
    ["Quantity"]=> 
    string(1) "1" 
    ["UserID"]=> 
    string(3) "137" 
    ["FullName"]=> 
    string(12) "Suhani Patel" 
    ["Date"]=> 
    string(10) "2016-10-28" 
    } 
}