2013-02-12 46 views
0

PHP從下面的xml文件中,我必須提取2個採購價格,其中包括2個數量,並將它們放入表格中。你看到下面的XML。我無法從陣列中獲得所需的變量。從數組中獲取數據的問題

<?xml version="1.0" encoding="UTF-8"?><products> 
<Product> 
    <ParentName>22.01.14.10</ParentName> 
    <Name>3040-100</Name> 
    <Prices> 
     <Price min-qty="1" currency="EUR">6,3200</Price> 
     <Price min-qty="12" currency="EUR">5,3200</Price> 
     <Price min-qty="24" currency="EUR">4,7200</Price> 
    </Prices> 
</Product> 
<Product> 
    <ParentName>22.01.10</ParentName> 
    <Name>PDS1C</Name> 
    <Prices> 
     <Price min-qty="1" currency="EUR">1,9565</Price> 
     <Price min-qty="10" currency="EUR">1,6828</Price> 
     <Price min-qty="20" currency="EUR">1,4828</Price> 
    </Prices> 
</Product> 
<Product> 
    <ParentName>22.01.14</ParentName> 
    <Name>P1017</Name> 
    <Prices> 
     <Price min-qty="1" currency="EUR">4,9337</Price> 
     <Price min-qty="20" currency="EUR">3,9699</Price> 
    </Prices> 
</Product> 
</products> 

有了這個,我填寫了價格數組:

foreach($product->{'Prices'}->children() as $key => $price) 
{ 
$prices[ "" . $price->attributes()->{'min-qty'}] = mysql_real_escape_string(str_replace(',','.',"" . $price[0])); 
} 
ksort($prices); // sort array 

下面的結果:

Array 
(
[1] => 6.3200 
[12] => 5.3200 
[24] => 4.7200 
) 
Array 
(
[1] => 1.9565 
[10] => 1.6828 
[20] => 1.4828 
) 
Array 
(
[1] => 4.9337 
[20] => 3.9699 
) 

現在我必須填寫瓦爾把瓦爾到表:

$qfirst = ''; // should be 1 
$pfirst = ''; // should be 6.3200 
$qsec = ''; // should be 12 
$psec = ''; // should be 5.3200 

我試過的我沒有得到數據進入4個變量。

+1

'$產品 - > { '價格'} - >兒童()' - 等等,這句法是有效的? – slugonamission 2013-02-12 13:16:20

+1

@slugonamission這是不尋常的,但它是完全有效的。 – Tchoupi 2013-02-12 13:25:18

+0

@MathieuImbert - 夠公平的,我從來沒有見過這種語法,它非常*很奇怪。 – slugonamission 2013-02-12 13:26:11

回答

0

您可以使用

用於打印所有鍵值。 =>print_r(array_keys($array));

用於打印值=> print_r(array_values($ array));

2

變化

$prices[ "" . $price->attributes()->{'min-qty'}] = mysql_real_escape_string(str_replace(',','.',"" . $price[0])); 

$prices[] = array($price->attributes()->{'min-qty'},mysql_real_escape_string(str_replace(',', '.', "" . $price[0]))); 

然後

foreach(array_map(null,array("first","sec","third"),$prices) as $blend) 
{ 
    ${"q". $blend[0]} = $blend[1][0]; 
    ${"p". $blend[0]} = $blend[1][1]; 
} 

var_dump($qfirst,$pfirst,$qsec,$psec) ; // it would create this variables 

OR

reset($prices); 
foreach(array("first","sec","third") as $blend) 
{ 
    ${"q". $blend} = key($prices); 
    ${"p". $blend} = current($prices); 
    next($prices); 
} 
var_dump($qfirst,$pfirst,$qsec,$psec) ; 
+0

喜歡這個! PHP中的動態變量使得它非常靈活,雖然很難調試:) – webnoob 2013-02-12 13:40:20

+0

Baba; 100%的分數!謝謝。最後是解決方案。 – user1575807 2013-02-12 13:50:16

+0

不客氣..看看如何接受:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Baba 2013-02-12 13:52:00

0

這個S imulates前兩輪一foreach循環,並給出了期望的結果:

reset($prices); 
$qfirst = key($prices); 
$pfirst = current($prices); 

next($prices); 
$qsec = key($prices); 
$psec = current($prices);