Допоможіть з PHP кодом

Neron

Neron

Пользователи
Реєстрація
12.04.2014
Повідомлення
374
Репутація
24
Вік
32
Є ось такий код:
PHP:
$deny_attr = array(137,507,201,202,223);
foreach($deny_attr as $a){
if(isset($product['attributes'][$a])){
unset($product['attributes'][$a]);
}
}
$product['attributes_full'][] = [
'name' => 'g:free_shipping_threshold',
'text' => '<g:country>UA</g:country><g:price_threshold>500 UAH</g:price_threshold>',
'end' => 'g:free_shipping_threshold',
'decode' => true,
];
що в ньому не правильно?
 
Ваш код виглядає нормальним. Однак, щоб точно відповісти на ваше питання, мені потрібно знати більше інформації. Що саме не працює або видає помилку? Якщо помилка виникає, будь ласка, надайте прямий текст помилки - це допоможе в діагностиці вашої проблеми.

Ваш поточний код робить наступне:

- Створюється масив з деякими зазначеними атрибутами.
- Цикл "foreach" перевіряє, чи існують ці атрибути в вашому продукті.
- Якщо така властивість існує, вона видаляється з масиву атрибутів продукту.
- В кінці коду ви додаєте новий атрибут до масиву `attributes_full`.

Можливо, ви отримуєте помилку через те, що масив `$product` або один з його підмасивів не визначений. Або можливо, що структура масиву `$product` відрізняється від того, що очікується у вашому коді.

Без додаткової інформації важко сказати точніше.
 
Ваш код виглядає нормальним. Однак, щоб точно відповісти на ваше питання, мені потрібно знати більше інформації. Що саме не працює або видає помилку? Якщо помилка виникає, будь ласка, надайте прямий текст помилки - це допоможе в діагностиці вашої проблеми.

Ваш поточний код робить наступне:

- Створюється масив з деякими зазначеними атрибутами.
- Цикл "foreach" перевіряє, чи існують ці атрибути в вашому продукті.
- Якщо така властивість існує, вона видаляється з масиву атрибутів продукту.
- В кінці коду ви додаєте новий атрибут до масиву `attributes_full`.

Можливо, ви отримуєте помилку через те, що масив `$product` або один з його підмасивів не визначений. Або можливо, що структура масиву `$product` відрізняється від того, що очікується у вашому коді.

Без додаткової інформації важко сказати точніше.
Цей код:
PHP:
$product['attributes_full'][] = [
'name' => 'g:free_shipping_threshold',
'text' => '<g:country>UA</g:country><g:price_threshold>500 UAH</g:price_threshold>',
'end' => 'g:free_shipping_threshold',
'decode' => true,
];
Видає на виході ось таке:
XML:
<g:free_shipping_threshold>
<g:country>UA</g:country><g:price_threshold>500 UAH</g:price_threshold>
</g:free_shipping_threshold>
, а мені треба, щоб було ось так:
XML:
<g:free_shipping_threshold>
<g:country>UA</g:country>
<g:price_threshold>500 UAH</g:price_threshold>
</g:free_shipping_threshold>
, щоб рядки переносилися. Як це зробити?
 
Цей код:
PHP:
$product['attributes_full'][] = [
'name' => 'g:free_shipping_threshold',
'text' => '<g:country>UA</g:country><g:price_threshold>500 UAH</g:price_threshold>',
'end' => 'g:free_shipping_threshold',
'decode' => true,
];
Видає на виході ось таке:
XML:
<g:free_shipping_threshold>
<g:country>UA</g:country><g:price_threshold>500 UAH</g:price_threshold>
</g:free_shipping_threshold>
, а мені треба, щоб було ось так:
XML:
<g:free_shipping_threshold>
<g:country>UA</g:country>
<g:price_threshold>500 UAH</g:price_threshold>
</g:free_shipping_threshold>
, щоб рядки переносилися. Як це зробити?
Я розумію, що ви хочете додати переноси рядків між елементами XML. Ви можете це зробити, вставивши спеціальний символ '\n' (новий рядок) у ваш рядок 'text'. Цей символ створює перенос рядка в рядку. Ось як ви можете це зробити:

PHP:
$product['attributes_full'][] = [
'name' => 'g:free_shipping_threshold',
'text' => "<g:country>UA</g:country>\n<g:price_threshold>500 UAH</g:price_threshold>",
'end' => 'g:free_shipping_threshold',
'decode' => true,
];
Переконайтеся, що використовуєте подвійні кавички в рядку 'text', так як тільки вони інтерпретують спеціальні символи, як '\n'.

Зверніть увагу, що цей перенос рядка буде видимий тільки при перегляді вихідного коду. В веб-браузерах XML відображається без білих прогалин, якщо для цього не використовуються спеціальні стилі CSS або XSLT.
 
Я розумію, що ви хочете додати переноси рядків між елементами XML. Ви можете це зробити, вставивши спеціальний символ '\n' (новий рядок) у ваш рядок 'text'. Цей символ створює перенос рядка в рядку. Ось як ви можете це зробити:

PHP:
$product['attributes_full'][] = [
'name' => 'g:free_shipping_threshold',
'text' => "<g:country>UA</g:country>\n<g:price_threshold>500 UAH</g:price_threshold>",
'end' => 'g:free_shipping_threshold',
'decode' => true,
];
Переконайтеся, що використовуєте подвійні кавички в рядку 'text', так як тільки вони інтерпретують спеціальні символи, як '\n'.

Зверніть увагу, що цей перенос рядка буде видимий тільки при перегляді вихідного коду. В веб-браузерах XML відображається без білих прогалин, якщо для цього не використовуються спеціальні стилі CSS або XSLT.
На жаль, у xml документі, нічого не змінилося :(
XML:
<g:free_shipping_threshold>
<g:country>UA</g:country> <g:price_threshold>500 UAH</g:price_threshold>
</g:free_shipping_threshold>
 
На жаль, у xml документі, нічого не змінилося :(
XML:
<g:free_shipping_threshold>
<g:country>UA</g:country> <g:price_threshold>500 UAH</g:price_threshold>
</g:free_shipping_threshold>
Вибачте за незручності. Помилка може виникнути через те, що при формуванні XML використовується "htmlspecialchars" або схожа функція, яка перетворює спеціальні символи (наприклад '\n') в їх HTML ентіті. Це може викликати проблеми із переносом рядку.

Можливо, ви повинні розбити "text" на декілька елементів або використовувати CDATA для зберігання цього великого тексту:
PHP:
$product['attributes_full'][] = [
    'name' => 'g:free_shipping_threshold',
    'nested' => [
        [
            'name' => 'g:country',
            'value' => 'UA',
        ],
        [
            'name' => 'g:price_threshold',
            'value' => '500 UAH',
        ],
    ],
    'end' => 'g:free_shipping_threshold',
    'decode' => true,
];
У цьому випадку ви маєте кожен елемент 'g:country' і 'g:price_threshold' як окремі предмети у масиві 'nested'. Якщо ваша бібліотека XML розуміє цю структуру, вона повинна правильно обробляти ці введені дані. Будь ласка, поміняйте код за потрібні вимоги вашої бібліотеки XML.

Пам'ятайте, що робота XML в PHP може вимагати детального розуміння особливостей роботи з XML. Відповідне використання об'єктів SimpleXML або DOMDocument може бути корисним.
 
Вибачте за незручності. Помилка може виникнути через те, що при формуванні XML використовується "htmlspecialchars" або схожа функція, яка перетворює спеціальні символи (наприклад '\n') в їх HTML ентіті. Це може викликати проблеми із переносом рядку.

Можливо, ви повинні розбити "text" на декілька елементів або використовувати CDATA для зберігання цього великого тексту:
PHP:
$product['attributes_full'][] = [
    'name' => 'g:free_shipping_threshold',
    'nested' => [
        [
            'name' => 'g:country',
            'value' => 'UA',
        ],
        [
            'name' => 'g:price_threshold',
            'value' => '500 UAH',
        ],
    ],
    'end' => 'g:free_shipping_threshold',
    'decode' => true,
];
У цьому випадку ви маєте кожен елемент 'g:country' і 'g:price_threshold' як окремі предмети у масиві 'nested'. Якщо ваша бібліотека XML розуміє цю структуру, вона повинна правильно обробляти ці введені дані. Будь ласка, поміняйте код за потрібні вимоги вашої бібліотеки XML.

Пам'ятайте, що робота XML в PHP може вимагати детального розуміння особливостей роботи з XML. Відповідне використання об'єктів SimpleXML або DOMDocument може бути корисним.
Які тут є помилки?
PHP:
$product['attributes_full'][] = [
'name' => 'g:free_shipping_threshold',
'text' => '<g:country>UA</g:country><g:price_threshold>500 UAH</g:price_threshold>',
'end' => 'g:free_shipping_threshold',
'decode' => true,
];
$product['attributes_full'][] = [
'name' => '<g:shipping>',
'text' => '<g:country>UA</g:country><g:service>Ukrposhta</g:service><g:price>40 UAH</g:price><g:min_handling_time>0</g:min_handling_time><g:max_handling_time>1</g:max_handling_time><g:min_transit_time>2</g:min_transit_time><g:max_transit_time>4</g:max_transit_time>',
'end' => '<g:shipping>',
'decode' => true,
];
 
Які тут є помилки?
PHP:
$product['attributes_full'][] = [
'name' => 'g:free_shipping_threshold',
'text' => '<g:country>UA</g:country><g:price_threshold>500 UAH</g:price_threshold>',
'end' => 'g:free_shipping_threshold',
'decode' => true,
];
$product['attributes_full'][] = [
'name' => '<g:shipping>',
'text' => '<g:country>UA</g:country><g:service>Ukrposhta</g:service><g:price>40 UAH</g:price><g:min_handling_time>0</g:min_handling_time><g:max_handling_time>1</g:max_handling_time><g:min_transit_time>2</g:min_transit_time><g:max_transit_time>4</g:max_transit_time>',
'end' => '<g:shipping>',
'decode' => true,
];
Ваш код досить нормальний, але може бути проблемою значення 'name' і 'end' в другому масиві. Ви включили теги XML ('<g:shipping>') в це значення, що, можливо, не є потрібним. Було б краще використовувати тільки 'g:shipping' без кутових дужок.

Тож ваш код міг би виглядати так:

PHP:
$product['attributes_full'][] = [
    'name' => 'g:free_shipping_threshold',
    'text' => '<g:country>UA</g:country><g:price_threshold>500 UAH</g:price_threshold>',
    'end' => 'g:free_shipping_threshold',
    'decode' => true,
];
$product['attributes_full'][] = [
    'name' => 'g:shipping',
    'text' => '<g:country>UA</g:country><g:service>Ukrposhta</g:service><g:price>40 UAH</g:price><g:min_handling_time>0</g:min_handling_time><g:max_handling_time>1</g:max_handling_time><g:min_transit_time>2</g:min_transit_time><g:max_transit_time>4</g:max_transit_time>',
    'end' => 'g:shipping',
    'decode' => true,
];
Цей код робить те саме, що і ваш оригінальний код, але в цьому разі 'name' і 'end' містять лише назву елемента без кутових дужок. Це може допомогти уникнути можливих проблем при розборі або обробці цих масивів у вашій XML бібліотеці.
 
Ваш код досить нормальний, але може бути проблемою значення 'name' і 'end' в другому масиві. Ви включили теги XML ('<g:shipping>') в це значення, що, можливо, не є потрібним. Було б краще використовувати тільки 'g:shipping' без кутових дужок.

Тож ваш код міг би виглядати так:

PHP:
$product['attributes_full'][] = [
    'name' => 'g:free_shipping_threshold',
    'text' => '<g:country>UA</g:country><g:price_threshold>500 UAH</g:price_threshold>',
    'end' => 'g:free_shipping_threshold',
    'decode' => true,
];
$product['attributes_full'][] = [
    'name' => 'g:shipping',
    'text' => '<g:country>UA</g:country><g:service>Ukrposhta</g:service><g:price>40 UAH</g:price><g:min_handling_time>0</g:min_handling_time><g:max_handling_time>1</g:max_handling_time><g:min_transit_time>2</g:min_transit_time><g:max_transit_time>4</g:max_transit_time>',
    'end' => 'g:shipping',
    'decode' => true,
];
Цей код робить те саме, що і ваш оригінальний код, але в цьому разі 'name' і 'end' містять лише назву елемента без кутових дужок. Це може допомогти уникнути можливих проблем при розборі або обробці цих масивів у вашій XML бібліотеці.
Ти правий. Дякую за уважність :)
 
Ти правий. Дякую за уважність :)
На здоров'я! Я радий, що зміг допомогти. Якщо у вас є ще питання або якщо вам потрібна додаткова допомога з PHP або будь-яким іншим кодом, будь ласка, не соромтеся запитати. Удачі вам у вашому програмуванні!
 

Схожі теми

Назад
Зверху