2013-03-21 2 views
1

이 질문에 대한 변형이 이전에 묻히고 대답되었지만 나는 똑똑한 사람이었고 문자 그대로 몇 주 동안 검색을 한 후에 필요한 항목을 찾을 수 없었습니다. 이 작업을 수행하는 쉬운 방법이있을 것입니다.SimpleDB 결과가 PHP 배열 형식

기존 코드 :

$response = $sdb->get_attributes('domain','itemname'); 
$newresponse = $response->body->GetAttributesResult->to_array(); 
print_r($newresponse); 

나는이 결과를 얻을 : 나는 [tenants] 하나를 가지고 고려해야

Array 
(
    [tenants] => Array 
     (
     [0] => Sam Smith 
     [1] => Janet Jones 
     [2] => Willy Wonka 
    ) 

    [buildingName] => 123 Main St. 
) 

: 나는 모습이 데이터를 원하는 것은

CFArray Object 
(
    [storage:ArrayObject:private] => Array 
     (
      [Attribute] => Array 
       (
        [0] => Array 
         (
          [Name] => tenants 
          [Value] => Sam Smith 
         ) 

        [1] => Array 
         (
          [Name] => tenants 
          [Value] => Janet Jones 
         ) 

        [2] => Array 
         (
          [Name] => tenants 
          [Value] => Willy Wonka 
         ) 

        [3] => Array 
         (
          [Name] => buildingName 
          [Value] => 123 Main St. 
         ) 

       ) 

     ) 

) 

또는 더 많은 값. 다른 변수는 단일 값을 가질 수도 있고 그렇지 않을 수도 있습니다. 나는 또한 [tenants] (즉 [buildingName][2]이고 다른 [tenants][3]에 있었다 순차적으로하지 않을 수 있다는 가능성을 고려해야합니다. 개념이. 이걸 어떻게해야합니까?

편집 여기에 이해가 안 분명히있다

:
$response = $sdb->get_attributes('domain','itemname'); 
$newresponse = $response->body->GetAttributesResult->to_array()->getArrayCopy(); 
print_r($newresponse); 

나는이 결과를 얻을 : 나는 다음에 기존 코드를 수정하는 경우 개인 배열 코멘트를

를 해결하기 위해

'개인 정보'에 대한 언급은 없지만 동일한 기본 질문이 적용됩니다. user2057272의 대답

user2053727에 따라

최종 솔루션, 당신은 신사 (또는 여성 의원)과 학자 상표입니다. 귀하의 답변은 거의입니다. 내가 가진 하나의 문제는 결과가이었다이었다 :

Array 
(
    [tenants] => Array 
     (
      [0] => Sam Smith 
      [1] => Janet Jones 
      [2] => Willy Wonka 
     ) 

    [buildingName] => Array 
     (
      [0] => 123 Main St. 
     ) 
) 

는 (하나 개의 요소가 있기 때문에) 대신 배열의 문자열이어야하는 [buildingName]를 해결하려면, 나는 다음에 내 마지막 코드를 수정 :

$response= $sdb->get_attributes('domain','itemname'); 
$newresponse = $response->body->GetAttributesResult->to_array(); 
$new = array(); 
foreach($newresponse["Attribute"] as $key => $value) 
    { 
    if(!isset($new[$value['Name']])) 
     { 
     $new[$value['Name']] = array(); 
     } 
    $new[$value['Name']][] = $value['Value']; 
    } 
array_walk($new, $walker = function (&$value, $key) use (&$walker) 
    { 
    if (is_array($value)) 
     { 
     if (count($value) === 1 && is_string($value[0])) 
      { 
      $value = $value[0]; 
      } 
     else 
      { 
      array_walk($value, $walker); 
      }  
     } 
    } 
    ); 
print_r($new); 

array_walk 부분의 janmoesen (convert sub-arrays with only one value to a string)에 대한 감사의 말.

내 결과가 내가 필요 정확히 지금 :

Array 
(
    [tenants] => Array 
     (
      [0] => Sam Smith 
      [1] => Janet Jones 
      [2] => Willy Wonka 
     ) 

    [buildingName] => 123 Main St. 
) 

감사합니다.

+0

개인 배열 – csw

+0

user2053727입니다. 그게 무슨 뜻인지는 모르겠지만 (Google은 도움이되지 않습니다). 그러나'$ newresults' 라인의'-> to_array()'뒤에'-> getArrayCopy()'를 추가하면 배열의 첫 번째 키가 private 속성을 제거하고'[Attribute]'가됩니다. 그래서 나는 여전히 위에서 설명한 것과 같은 문제를 가지고 있습니다. – jjj916

+0

[Attribute] 출력을 게시하여 분명히해야합니다. – csw

답변

0
$new = array(); 
foreach($newresponse["Attribute"] as $key => $value) { 
    if(!isset($new[$value['Name']])) { 
     $new[$value['Name']] = array(); 
    } 
    $new[$value['Name']][] = $value['Value']; 
} 
var_dump($new) 

필요에 따라 사용자 정의하십시오.

+0

이것은 거의 제가 필요로하는 것입니다. 고맙습니다.위의 최종 해결책을 게시하기 위해 원래의 질문을 편집했습니다. – jjj916