Всем привет! Есть файл xml нужно выгрузить его на сайт и отсортировать его по цвету (color) Код (Text): <yml> <shop> <offer> <price>200</price> <vendor>Vendor</vendor> <color>RED</color> </offer> <offer> <offer> <price>300</price> <vendor>Vendor</vendor> <color>RED</color> </offer> <offer> <price>100</price> <vendor>Vendor</vendor> <color>blue</color> </offer> <offer> <price>100</price> <vendor>Vendor</vendor> <color>green</color> </offer> </shop> </yml> Код (Text): $xml = simplexml_load_file('export.xml'); foreach ($xml->shop->offer as $producs) if ( (string) $xml->shop->offer->color == "REG" ) { ?> <tr> <td><?php echo $producs->price; ?></td> </tr> } Должно вывести 200 300 Но если убрать конструкцию if ( (string) $xml->shop->offer->color == "REG" ) то выводится весь файл xml, если оставить то не выводится ничего. Подскажите что не так. Заранее спасибо.
так понимать надо хоть немного чего пишете PHP: foreach ($xml->shop->offer as $producs) if ( (string) $xml->shop->offer->color != "RED" ) { ?> <tr> <td><?php echo $producs->price; ?></td> </tr> } вот так будут выводиться все записи у которых цвет НЕ RED если нужно отсортировать - сначала загоняете данные в массив - сортируете- выводите массив
если еще бы весь код видеть вывод ..а не кусок.... я б лучше так сделал PHP: $xml = simplexml_load_file('export.xml'); foreach ($xml->shop->offer as $producs) { if ( (string) $xml->shop->offer->color != "RED" ) { echo "<tr> <td>{$producs->price}</td> </tr>"; } } предполагается что заголовок таблицы и ее завершение - где то там у вас выводятся
Да выводятся, сейчас пробую элементы xml (в моем случаи color) записать в переменные и уже потом проверять на равенство. На самом деле мне это не очень прям надо, просто хочется разобраться, и если получится то буду внедрять в свой сайт если нет то ну и ладно )
Зачем равенство? Всё просто как дважды два: PHP: <?php $xml = [ [ 'name' => 'a', 'color' => 'red', ], [ 'name' => 'b', 'color' => 'red', ], [ 'name' => 'c', 'color' => 'green', ], [ 'name' => 'd', 'color' => 'white', ], ]; // Собирем все цвета из массива $colors = array_map(function($product){ return $product['color']; }, $xml); // Выбираем уникальные цвета $uniques = array_unique($colors); // Для каждого цвета фильтруем массив и выводим foreach($uniques as $color) { echo "Color: {$color}\n"; $products = array_filter($xml, function($product) use($color) { return $color == $product['color']; }); var_dump($products); echo "\n==================\n"; } Спойлер: Результат Color: red array(2) { [0]=> array(2) { ["name"]=> string(1) "a" ["color"]=> string(3) "red" } [1]=> array(2) { ["name"]=> string(1) "b" ["color"]=> string(3) "red" } } ================== Color: green array(1) { [2]=> array(2) { ["name"]=> string(1) "c" ["color"]=> string(5) "green" } } ================== Color: white array(1) { [3]=> array(2) { ["name"]=> string(1) "d" ["color"]=> string(5) "white" } } ==================
Вы вместо того чтобы помочь, отвлекаете человека от его ошибки в коде. И в формате xml корневой тэг должен быть один, а тут их два. Еще дублируются открывающие тэги offer и структура документа неверная.
Код (Text): <?php $xml = simplexml_load_file('file.xml'); echo "<table border=\"1\" cellspacing=\"0\"cellpadding=\"4\">"; foreach ($xml->offer as $products=>$value) if ( (string) $value->color == "RED" ) { ?> <tr> <td><?php echo $value->price; ?></td> </tr> <tr> <td><?php echo $value->vendor; ?></td> </tr> <tr> <td><?php echo $value->color; ?></td> </tr> <?php } ?> </table>
Код (Text): <?xml version="1.0" encoding="windows-1251" standalone="yes"?> <shop> <offer> <price>200</price> <vendor>Vendor</vendor> <color>RED</color> </offer> <offer> <price>300</price> <vendor>Vendor</vendor> <color>RED</color> </offer> <offer> <price>100</price> <vendor>Vendor</vendor> <color>blue</color> </offer> <offer> <price>100</price> <vendor>Vendor</vendor> <color>green</color> </offer> </shop>
ТС спросил как отсортировать массив, я привел аналогию. Если он не может перевести массив в объект, да еще и в лыжах гвозди, то это явно не моя вина.
Я Вас всех прекрасно понимаю что для того чтобы код заработал не хватало переменной $value. Код (Text): foreach ($xml->offer as $products=>$value) if ( (string) $value->color == "RED" ) Спасибо за помощь )