2012-08-14 2 views
0

simpleXmlElement에서 새 배열을 작성하려고합니다. 나는 원하는 정보를 얻고 있으며 올바른 계층 구조가 아닙니다.다른 배열의 배열 구성

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 
) 

어떤 제안을합니다 :

$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); 

이 저를 준다? 감사!

답변

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가 필요하지 않습니까? –

+0

@TylerNichol이 (가) 내 코드를 업데이트했습니다. –

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 배열은 원하는 형식이어야합니다.

도움이되기를 바랍니다.