Как получить значение тега <category>
и записать его в масив?
Проблема в том, что никак не могу получить содержимое тега <category>
(Лампы бытовые), любые попытки, кроме echo
, возвращают object(SimpleXMLElement).
<?php
$file = <<<XML
<yml_catalog date="2019-10-18 16:00">
<shop>
<categories>
<category id="41" parentId="38">Лампы бытовые</category>
<category id="42" parentId="41">A60</category>
</categories>
</shop>
</yml_catalog>
XML;
$value = new SimpleXMLElement($file);
$categories = [];
foreach ($value->shop->categories->category as $c) {
$categories[(int)$c->attributes()['id']] =
[
'id' => (int)$c->attributes()['id'],
'parentId' => (int)$c->attributes()['parentId'],
'name' => $c[0] // object(SimpleXMLElement)
];
echo '<pre>';
var_dump($categories[(int)$c->attributes()['id']]);
echo '</pre>';
echo '<hr>';
}
Результат var_dump
в цикле
array(3) {
["id"]=>
int(41)
["parentId"]=>
int(38)
["name"]=>
object(SimpleXMLElement)#6 (2) {
["@attributes"]=>
array(2) {
["id"]=>
string(2) "41"
["parentId"]=>
string(2) "38"
}
[0]=>
string(25) "Лампы бытовые"
}
}
Для получения строкового значения объекта SimpleXMLElement
надо кастануть этот объект в тип string
(это собственно неявно делается при вызове echo
, а вам надо это сделать явно):
'name' = (string) $c[0],
// или с небольшим оверхедом
'name' = strval($c[0]),
Думаю можете сделать так:
<?php
$file = '<yml_catalog date="2019-10-18 16:00">
<shop>
<categories>
<category id="41" parentId="38">Лампы бытовые</category>
<category id="42" parentId="41">A60</category>
</categories>
</shop>
</yml_catalog>';
$value = new SimpleXMLElement( $file );
$categories = [];
$data = [];
foreach ( $value->shop->categories->category as $key => $c ) {
$data[ 'id' ] = ( int )$c->attributes()[ 'id' ];
$data[ 'parentId' ] = ( int )$c->attributes()[ 'parentId' ];
$data[ 'name' ] = ( string )$c[ 0 ];
array_push( $categories, $data );
}
print_r( $categories );
/*
Результат
(
[0] => Array
(
[id] => 41
[parentId] => 38
[name] => Лампы бытовые
)
[1] => Array
(
[id] => 42
[parentId] => 41
[name] => A60
)
)
*/
Не совсем ясен вопрос. Содержимое внутри тега?
'name' => $c[0].__toString() // SimpleXMLElement::__toString — Возвращает содержимое строки
https://www.php.net/manual/ru/simplexmlelement.tostring.php
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не работает запрос UPDATE, данные не изменяютсяПеременные существуют, через echo проверял, подключение к базе данных тоже, другие запросы выполняются
Эта загрузка работает стабильно на локальном сервере, но на удаленном нетВ форме прописан enctype="multipart/form-data