1

私はこの質問のバリエーションが以前に尋ねられ、答えられたことがあることを知っていますが、私は賢い人であり、文字通り何週間も何度も検索した後、必要なものを見つけることができません。私が行方不明になっているこれを行うためのいくつかの簡単な方法があるに違いありません。

既存のコード:

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

私はこの結果を得る:

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.
                        )

                )

        )

)

このデータを次のように表示します。

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

   [buildingName] => 123 Main St.
)

[tenants]1つ以上の値があることを説明する必要があります。他の変数は、単一の値を持つ場合と持たない場合があります。また、が順番に並んでいない可能性も考慮に入れる必要があります(つまり、別の[tenants]順番になっている可能性があります。ここに明確に理解できない概念があります。これを行うにはどうすればよいですか?[buildingName][2][tenants][3]

プライベート配列コメントをアドレス指定するために編集
既存のコードを次のように変更した場合:

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

私はこの結果を得る:

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] => companyname
                    [Value] => 123 Main St.
                )

        )

)

したがって、「プライベート」への参照はなくなりましたが、同じ基本的な質問が当てはまります。

user2057272の回答に基づく最終的な解決策

user2053727、あなたは紳士(または紳士)であり、学者でもあります。あなたの答えはほぼ完璧に機能しました。私が抱えていた1つの問題は、結果が次のとおりであったことでした。

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

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

を配列ではなく文字列に修正する[buildingName]ために(要素が1つしかないため)、最終的なコードを次のように変更しました。

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

janmoesen(値が1つしかないサブ配列を文字列に変換する)に感謝しますarray_walk

私の結果はまさに私が必要としているものです:

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

    [buildingName] => 123 Main St.
)

ありがとうございました。

4

1 に答える 1

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)  

必要に応じてカスタマイズします。

于 2013-03-21T18:16:02.923 に答える