Работа с массивом

Тема в разделе "PHP", создана пользователем AnOcToJI, 13 сен 2016.

  1. AnOcToJI

    AnOcToJI

    Регистрация:
    28 дек 2012
    Сообщения:
    309
    Симпатии:
    188
    Столкнулся с одной очень неприятной вещью, не могу никак понять как обработать на вывод в шорткод вордпресса несколько значений из массива, с единичными всё нормально ретурном возвращается что нужно, но если дело доходит до пакетного вывода, то тут уже косяк, выводится последнее значение и только, если выводить echo'м, то он выпадает из стиля и добавляется вверх контента, что соответственно не даёт с ним работать как с шорткодом

    PHP:
    function p_qwe()
    {
    //тут ненужный код подгрузки массива
        
    if ($status != 200) {
            echo 
    'Error: </br>';
        } else {

            
    $arr json_decode(gzdecode(substr($result$headerSize)), true);

            foreach (
    $arr as $val) {
                if (
    strpos($val['code'],  'QWE-') == 'QWE-') {

                    
    $price number_format((float)$val['price_list']['значение'], 0''' ');        
                }
            }
        }
    return 
    $price;
    }
     
    Lasted edited by : 14 сен 2016
  2. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.580
    Симпатии:
    1.482
    не понятно что ты хочешь получить.. что ты хочешь, чтобы возвращал метод p_qwe в случае с массивом, где больше чем один элемент?
     
  3. AnOcToJI

    AnOcToJI

    Регистрация:
    28 дек 2012
    Сообщения:
    309
    Симпатии:
    188
    да и дальше ухродит на шорткод


    Код:
    function p_123()
    {
        return p_qwe();
    }
    add_shortcode('p_123', 'p_123');[code]
    
    там по такой сортировке около 10 строчек должно получится.
     
  4. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.580
    Симпатии:
    1.482
    к сожалению, мне это ничего не говорит, т.к. wordpress я не ворочал никогда. Я хочу понять, что ты хочешь, чтобы вернула функция) сейчас она у тебя отдаёт последний элемент в массиве.

    можно к примеру собрать все коды в один массив и вывести через запятую (или любой другой разделитель) или же вернуть массив, а дальше уже всю магию будет делать твой add_shortcode
     
  5. AnOcToJI

    AnOcToJI

    Регистрация:
    28 дек 2012
    Сообщения:
    309
    Симпатии:
    188
    ну если на уровне функций то да, в функцию надо вернуть все значения по фильтру
    Код:
    >'QWE-') == 'QWE-'
    к примеру так
    <td>значение 1</td>
    <td>значение 3</td>
    <td>значение 4</td>
    <td>значение 5</td>

    в реальности там надо таблицу в каждой строчке по 3 столбца, но это я уже сам допишу, я не могу понять как мне все значения в функцию вернуть а не только последнее, я так предполагаю надо собрать массив из массива и его уже в функцию вернуть, но как-то не смог дотямкать как сделать
     
  6. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.580
    Симпатии:
    1.482
    PHP:
    function p_qwe()
    {
        
    //тут ненужный код подгрузки массива
        
    if ($status != 200) {
            echo 
    'Error: </br>';
        } else {

            
    $arr json_decode(gzdecode(substr($result$headerSize)), true);
            
    $prices = [];

            foreach (
    $arr as $val) {
                if (
    strpos($val['code'],  'QWE-') == 'QWE-') {

                    
    $prices[] = number_format((float)$val['price_list']['значение'], 0''' ');        
                }
            }
        }
        return 
    $prices;
    }
    функция вернёт массив со значениями
     
    AnOcToJI нравится это.
  7. wh1tegray

    wh1tegray

    Регистрация:
    19 сен 2016
    Сообщения:
    5
    Симпатии:
    1
    Ну все правильно, у вас при нескольких значениях выводится последнее, потому что $prices = number_format(); располагается внутри цикла foreach и перезаписывается при каждом проходе по $arr... Делайте массив вывода или в строку через запятую через оператор .= (что, в общем-то криво...). Лучше массив, как написано чуть выше, с добавлением [], а потом обрабатывайте как нужно.
     
  8. AnOcToJI

    AnOcToJI

    Регистрация:
    28 дек 2012
    Сообщения:
    309
    Симпатии:
    188
    помогите уже добить не даётся мне php хоть ты тресни.

    есть обработчик
    Код:
    function test()
    {
    
        if ($status != 200) {
            echo '...';
        } else {
    
            $arr = бла бла бла;
            $price = [];
    
    
            foreach ($arr as $val) {
                if (strpos($val['code'],  'QWE-') == 'QWE-') {
    
                    $price[] = '<tr><td class="articul"><i class="ico-price-art"></i>'
                        . $val['code']
                        . '</td><td class="description">'
                        //. $code
                        . $val['name']
                        . '</td><td class="price"><i class="ico-price"></i>'
                        . number_format((float)$val['price_L']['Значение'], 0, '', ' ')
                        . ' <span>₽</span></td></tr>';;
    
                }
            }
        }
        return $priceSelenda;
    }
    
    возвращается массив Array([0]=>значение, [1] => значение и т.д)

    и есть вывод на сайт через шорткод на вордпресс
    Код:
    function test1()
    {
        return test();
    }
    add_shortcode('test', 'test');
    выводит он естественно Array и всё, как обработать массив так чтобы вывести уже непосредственно значения, я понимаю что это элементарно для некоторых но меня уже он бесит что доделать не могу.
     
  9. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.580
    Симпатии:
    1.482
    PHP:
    function test()
    {

        if (
    $status != 200) {
            echo 
    '...';
        } else {

            
    $arr бла бла бла;
            
    $price = [];


            foreach (
    $arr as $val) {
                if (
    strpos($val['code'],  'QWE-') == 'QWE-') {

                    
    $price[] = '<tr><td class="articul"><i class="ico-price-art"></i>'
                        
    $val['code']
                        . 
    '</td><td class="description">'
                        
    //. $code
                        
    $val['name']
                        . 
    '</td><td class="price"><i class="ico-price"></i>'
                        
    number_format((float)$val['price_L']['Значение'], 0''' ')
                        . 
    ' <span>₽</span></td></tr>';;

                }
            }
        }
        return 
    implode(' '$price);
    }
    вернёт строку.
     
    AnOcToJI нравится это.
  10. neozzz2016

    neozzz2016

    Регистрация:
    21 дек 2016
    Сообщения:
    3
    Симпатии:
    0
    Так сделайте команду
    add_shortcode('test', implode(';',$test));