Вот как выглядит мой объект с print_r (это объект, возвращаемый PHP SDK для простой БД Amazon Web Services.
[GetAttributesResult] => CFSimpleXML Object
(
[Attribute] => Array
(
[0] => CFSimpleXML Object
(
[Name] => data_datein
[Value] => 2011-04-23
)
[1] => CFSimpleXML Object
(
[Name] => data_estatus
[Value] => 0
)
[2] => CFSimpleXML Object
(
[Name] => data_status
[Value] => 1
)
[3] => CFSimpleXML Object
(
[Name] => data_title
[Value] => Company Info
)
[4] => CFSimpleXML Object
(
[Name] => data_tags
[Value] => firsttag
)
[5] => CFSimpleXML Object
(
[Name] => data_tags
[Value] => secondtag
)
[6] => CFSimpleXML Object
(
[Name] => data_tags
[Value] => thirdtag
)
[7] => CFSimpleXML Object
(
[Name] => data_files
[Value] => company_info.flv
)
[8] => CFSimpleXML Object
(
[Name] => data_id
[Value] => 8993
)
)
)
У меня есть функция, которая выполняет итерации по объекту GetAttributesResult исоздает ассоциативный массив, который позволяет легко ссылаться на мои поля по их именам. Одно из моих имен - data_tags, которое повторяется неизвестное число раз. Я хотел бы вернуть data_tags как простой индексированный массив этих значений. Вот моя функция, который не работает.
function attrToArray($select) {
$results = array();
$x = 0;
foreach($select->body->GetAttributesResult as $result) {
foreach ($result as $field) {
if (array_key_exists($field,$results[$x])) {
$results[$x][ (string) $field->Name ][] = (string) $field->Value;
} else {
$results[$x][ (string) $field->Name ] = (string) $field->Value;
}
}
$x++;
}
return $results;
}
Я не знаю, является ли это наиболее элегантным решением, но я не понимаю, почему это не сработает. array_key_exists не возвращает true.ошибку, которую я смог проверить как in_array($field-Name,$results[$x])
, и это построило массив моих повторяющихся значений $ field-> Name ... но он также преобразовал все остальные значения во вложенный массив из одного элемента ... так что может показаться, чтовернул true больше, чем я ожидал. Хотя дефис там был по ошибке, я хотел использовать -> который не возвращает true ...Я очень смущен тем, что там происходит.Вот print_r, чтобы показать, что вернулось.
Array ( [0] => Array (
[data_datein] => 2011-04-23
[data_estatus] => 0
[data_status] => Array ( [0] => 1 )
[data_title] => Array ( [0] => Company Info )
[data_tags] => Array (
[0] => firsttag
[1] => secondtag
[2] => thirdtag )
[data_files] => Array ( [0] => company_info.flv )
[data_id] => Array ( [0] => 8993 ) ) )
Любые указатели, предложения или инструкции о том, как я мог бы справиться с этим лучше ... и, по крайней мере, если кто-то может выяснить, как я могу добраться до вышеупомянутогомассив без вложенных массивов в других не избыточных полях.Очень признателен!
Вот print_r()
из $result
CFSimpleXML Object ([Attribute] => Array ([0] => CFSimpleXML Object ([Name] => data_datein [Value] => 2011)-04-23)
[1] => CFSimpleXML Object
(
[Name] => data_estatus
[Value] => 0
)
[2] => CFSimpleXML Object
(
[Name] => data_title
[Value] => 0001 01 Company Name
)
[3] => CFSimpleXML Object
(
[Name] => data_status
[Value] => 1
)
[4] => CFSimpleXML Object
(
[Name] => data_tags
[Value] => good stuff
)
[5] => CFSimpleXML Object
(
[Name] => data_tags
[Value] => save tags
)
[6] => CFSimpleXML Object
(
[Name] => data_tags
[Value] => tagger works
)
[7] => CFSimpleXML Object
(
[Name] => data_files
[Value] => 0001_01_company_name.flv
)
[8] => CFSimpleXML Object
(
[Name] => data_id
[Value] => yFKwIxjIhH
)
)
)
и здесь print_r()
из $field
(повторяется и разделяется тегами <hr>
.)
CFSimpleXML Object
(
[Name] => data_datein
[Value] => 2011-04-23
)
<hr>CFSimpleXML Object
(
[Name] => data_estatus
[Value] => 0
)
<hr>CFSimpleXML Object
(
[Name] => data_title
[Value] => 0001 01 Company Name
)
<hr>CFSimpleXML Object
(
[Name] => data_status
[Value] => 1
)
<hr>CFSimpleXML Object
(
[Name] => data_tags
[Value] => good stuff
)
<hr>CFSimpleXML Object
(
[Name] => data_tags
[Value] => save tags
)
<hr>CFSimpleXML Object
(
[Name] => data_tags
[Value] => tagger works
)
<hr>CFSimpleXML Object
(
[Name] => data_files
[Value] => 0001_01_company_name.flv
)
<hr>CFSimpleXML Object
(
[Name] => data_id
[Value] => yFKwIxjIhH
)