2012-08-14 189 views
0

我想從simpleXmlElement構建一個新數組。我收到我想要的信息,只是沒有在正確的層次結構中。從其他陣列構建陣列

$xmlNew1 = new SimpleXMLElement($responseNew1); 
$test = array(); 
foreach ($xmlNew1->children() as $newChild){ 
    $classIden[] = (string)$xmlNew1->class['id']; 
    $item[] = (string)$xmlNew1->code; 
    $family[] = (string)$xmlNew1->family; 
    for($i=0, $count = count($classIden); $i < $count; $i++) { 
     $test[$item[$i]][$family[$i]]= $classIden[$i]; 
    } 
} 

print_r($test); 

這給了我:

Array 
(
[9522] => Array 
    (
     [Mens Hats] => 44 
    ) 

[9522-NC-NO SIZE] => Array 
    (
     [Mens Hats] => 44 
    ) 

[B287CSQU] => Array 
    (
     [Boys] => 1 
    ) 

,但我想

Array 
(
[9522] => Array 
(
    [family] => Mens Hats 
    [classId] => 44 
) 

什麼建議嗎?謝謝!

回答

1

這也許應該這樣做(更換主迴路內容):

$id = (string)$newChild->class['id']; 
$code = (string)$newChild->code; 
$family = (string)$newChild->family; 

$items[$code] = array(
    'family' => $family, 
    'classId' => $id, 
); 

編輯

忘記使用$newChild而不是$xmlNew1

+0

我不需要在foreach摳每一個孩子叫出來? – 2012-08-14 04:30:30

+0

@TylerNichol更新了我的代碼。 – 2012-08-14 04:38:47

0

我不知道你的層次結構,因爲我不太瞭解HTML。你已經隱藏了結構。但是,您應該可以按照您尋找的格式直接構建數組。

讓我們儘量減少複雜性。假設你有一個包含所有孩子的變量。所以你可以分開迭代並加載這些孩子。裝載:

$xmlNew1 = new SimpleXMLElement($responseNew1); 
$newChildren = $xmlNew1->children(); 

我不能說你如果$xmlNew1->children()足夠你得到所有你正在尋找的XML元素,但我們只是假設如此。

下一部分是關於迭代。書面當你遍歷孩子,你應該建立$test陣列 - 如你部分已經做了:

$test = array(); 
foreach ($newChildren as $newChild) { 
    ... 
} 

現在缺少的部分是在$test創建您的結構:

Array(
    [9522] => Array(
     [family] => Mens Hats 
     [classId] => 44 
    ) 

我喜歡the suggestion @Jack gives此首先將要提取的值分配給自己的變量,然後創建條目。

$newItem = array(
    'family' => $family, 
    'classId' => $id, 
); 
$test[$code] = $newItem; 

當然,你必須將它放入迭代中。迭代完成後,$test數組應該具有您要查找的格式。

我希望這是有幫助的。