@ArtSlin

Почему не работает сравнение строк?

Добрый день! Делаю актуальное наличие товара на сайте. Гружу стороннюю xml-ку. Столкнулся с проблемой. Не работает сравнение строк в функции. Пробовал и простое сравнение $item->code==$product_code и strcmp(). Пробелов нет проверял.
function getXmlProduct($product_code,$xml_array){
   foreach ($xml_array->items->item as $item) {
     if (!strcmp($item->code,$product_code) && $item->stock=="В наявності"){
        return $item->priceRUAH;
     } else {
      return 0;
     }    
  }
} 

$sql_all = "SELECT * FROM products WHERE manufacturers_id=41";
$results_all = $conn->query($sql_all);
foreach ($results_all as $key => $result_all) {
            $price=getXmlProduct($result_all['products_ean'],$xml_array);
            if ($price==0){             
            выключить товар
           } else {
            включить товар
           }
            
   }
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Ваша функция выходит на первой же итерации, если первый элемент не совпал - до нужного у неё дойти нет шансов.
Ну а сравнение прекрасно работает:
function getXmlProduct(string $product_code, SimpleXMLElement $xml): int
{
    foreach ($xml->items->item as $item) {
        if (
            (string)$item->code === $product_code &&
            (string)$item->stock === "В наявності"
        ) {
            return (int)$item->priceRUAH;
        }
    }

    return 0;
}


Если хотите, то можете и в стиле пятилетней давности функцию сделать:
function getXmlProduct($product_code, $xml)
{
    foreach ($xml->items->item as $item) {
        if ($item->code == $product_code && $item->stock == "В наявності") {
            return (int)$item->priceRUAH;
        }
    }

    return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы