PHP, если еще заявление не повторяет еще - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь повторить норвежский язык, если есть xmllang = "no", если не echo "noname". Нравится

000000000121698001

текст 000000000121699001, без названия

Но это только возврат всех продуктов, которые имеют xmllang = "нет" и не печатают productId без xmllang = "нет"

XML

<catalog>
<product productid="000000000121698001">
    <displayname xmllang="da">text</displayname>
    <displayname xmllang="fi">text</displayname>
    <displayname xmllang="no">text</displayname>
    <displayname xmllang="sv">text</displayname>    
</product>

<product productid="000000000121699001">
    <displayname xmllang="da">test</displayname>
    <displayname xmllang="x-default">test</displayname>
    <displayname xmllang="sv">test</displayname>
</product>

PHP

foreach ($xml->product as $product) {

    foreach ($product->displayname as $name) {
        switch((string) $name['xmllang']) {
            case 'no':

                echo $product->attributes()->productid. ",";

                if (isset($name)){
                    echo $name. ",", PHP_EOL;
                } else {
                    echo 'noname ,';
                }
                echo "<br>\n";
        }
    }
}

1 Ответ

0 голосов
/ 28 августа 2018

Я бы разделил это на две части: 1-я подготовить данные и найти правильные локализованные метки или установить значение по умолчанию; затем 2-й выводит данные в любом формате (или в идеале передает $idList в шаблон).

<?php
/** @var SimpleXMLElement $xml */

$idList = [];

/* Prepare the data */
foreach ($xml->product as $product) {
    $fallbackLabel = null;

    /* Iterate over the display names */
    foreach ($product->displayname as $name) {
        /* And search for the one in a matching language */
        switch ((string)$name['xmllang']) {
            case 'no':
                $idList[$product->attributes()->productid] = $name;
                break;
            case 'x-default':
                $fallbackLabel = $name;
                break;
        }
    }

    /* If no name in the searched language was found, set a fallback here */
    if (!isset($idList[$product->attributes()->productid])) {
        if (!empty($fallbackLabel)) {
            /* If a label with a language code of "x-default" was found, use that as fallback label */
            $idList[$product->attributes()->productid] = $fallbackLabel;
        } else {
            /* …if not set a static text */
            $idList[$product->attributes()->productid] = 'noname';
        }
    }
}

/* Output the data */
foreach ($idList as $id => $label) {
    echo sprintf("%s,%s<br>\n", $id, $label);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...