我知道這個問題的變種之前已經被問到和回答過,但我是一個聰明的人,經過幾個星期的搜索和搜索後,我找不到我需要的東西。必須有一些簡單的方法來做到這一點我缺少。SimpleDB結果到PHP數組格式
現有代碼:
$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.
)
我需要考慮有一個或更多值。其他變量可能有也可能沒有單個值。我還必須考慮可能性可能不按順序(即[buildingName]
是[2]
和另一在[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
最終的解決方案,你都是一個紳士(或淑女)和學者。你的答案完美工作幾乎。在一個問題我有是,結果是:
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);
我對janmoesen(convert sub-arrays with only one value to a string)與array_walk
部分表示感謝。
我的結果是,現在正是我需要的:
Array
(
[tenants] => Array
(
[0] => Sam Smith
[1] => Janet Jones
[2] => Willy Wonka
)
[buildingName] => 123 Main St.
)
謝謝。
這是一個私人數組 – csw 2013-03-21 16:58:13
user2053727,我不知道這意味着什麼(並且Google沒有幫助)。但是我發現,如果我在'$ newresults'行的' - > to_array()'之後添加' - > getArrayCopy()',它會消除私有內容,並且數組中的第一個鍵變爲'[Attribute]'。所以我仍然有與上面描述的相同的問題。 – jjj916 2013-03-21 17:37:50
你應該發佈[Attribute]輸出來清除 – csw 2013-03-21 17:41:49