[Решено] Как отсортировать массив?

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

Статус темы:
Закрыта.
  1. AnOcToJI

    AnOcToJI

    Регистрация:
    28 дек 2012
    Сообщения:
    309
    Симпатии:
    188
    Дня доброго.
    собственно есть массив вида
    Код:
    array (
      0 =>
      array (
      'code' => '014-001',
      'name' => 'Имя',
      'group' =>
      array (
      0 => 'группа',
      ),
      'price' => NULL,
      ),
      1 =>
      array (
      'code' => '014-002',
      'name' => 'Имя',
      'group' =>
      array (
      0 => 'группа',
      ),
      'price' => NULL,
      ),
      2 =>
      array (
      'code' => '030-001',
      'name' => 'Имя',
      'group' =>
      array (
      0 => 'группа',
      ),
      'price' => '800',
      )
    ,
      3 =>
      array (
      'code' => '030-002',
      'name' => 'Имя',
      'group' =>
      array (
      0 => 'группа',
      ),
      'price' => '800',
      )
    )
    И нужно сделать следующее
    1) если 'code' = 014-*** то скрываем или не выводим это значение
    2) если 'code' = 030-*** то добавляем надпись "код 030" перед каждым из значений и одну общую над этой группой
     
  2. $iD

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

    Регистрация:
    13 мар 2012
    Сообщения:
    3.580
    Симпатии:
    1.482
    не совсем понятно, что ты имеешь ввиду под "не выводим"? если код 014, то в массиве не должно быть этого элемента?
    куда добавляем "код 030"?

    покажи пример?

    ну а выглядит это так, как будто тебе нужно просто пройтись foreach и создать новый массив с нужными элементами.
     
  3. AnOcToJI

    AnOcToJI

    Регистрация:
    28 дек 2012
    Сообщения:
    309
    Симпатии:
    188
    Код:
    <?php
      $c = curl_init();
       curl_setopt($c, CURLOPT_URL, 'price.gz');
       curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
       curl_setopt($c, CURLOPT_HEADER, true);
       $result = curl_exec($c);
       $status = curl_getinfo($c, CURLINFO_HTTP_CODE);
       $headerSize = curl_getinfo($c, CURLINFO_HEADER_SIZE);
       ?>
       
     
    <table>
    <tr>
       <th class="articul">Артикул</th>
       <th class="description">Описание</th>
       <th class="price">Цена</th>
    </tr>
      <?php
         foreach($arr as $val){
           $price = '<tr><td class="articul"><i class="ico-price-art"></i>'
           .$val['code']
           . '</td><td class="description">'
           .$val['name']
           . '</td><td class="price"><i class="ico-price"></i>'
           .number_format((float)$val['price'],0,'',' ')
           . ' РУБ.</td></tr>';
           
           echo $price;
         }
    
       }
    ?>
    
    </table>
    
     
  4. $iD

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

    Регистрация:
    13 мар 2012
    Сообщения:
    3.580
    Симпатии:
    1.482
    PHP:
    foreach($arr as $val) {
        if (
    strpos($val['code'], '014-') !== false) {
            continue;
        }
         
    $code strpos($val['code'], '030-') ? 'код 030' '';

           
    $price '<tr><td class="articul"><i class="ico-price-art"></i>'
           
    $code 
           
    '</td><td class="description">'
           
    .$val['name']
           . 
    '</td><td class="price"><i class="ico-price"></i>'
           
    .number_format((float)$val['price'],0,'',' ')
           . 
    ' РУБ.</td></tr>';
           
           echo 
    $price;
         }
    Т.к. ты ничего толком не объяснил, то как-то так :Smile:
     
    Baco и AnOcToJI нравится это.
  5. AnOcToJI

    AnOcToJI

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

    странно как-то отрабатывает добавление
    если в массиве есть к примеру
    001-030-222 то надпись он добавляет
    а выше 030-222 он не добавляет надпись
    мне нужно чтобы он именно первые цифры учитывал

    если использовать strstr то добавляется для всех где есть 030
     
    Последнее редактирование: 19 июн 2016
  6. $iD

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

    Регистрация:
    13 мар 2012
    Сообщения:
    3.580
    Симпатии:
    1.482
    PHP:
    foreach($arr as $val) {
    if (
    strpos($val['code'], '014-') !== false) {
    continue;
    }
    $code strpos($val['code'], '030-') === 'код 030' '';

    $price '<tr><td class="articul"><i class="ico-price-art"></i>'
    $code
    '</td><td class="description">'
    .$val['name']
    '</td><td class="price"><i class="ico-price"></i>'
    .number_format((float)$val['price'],0,'',' ')
    ' РУБ.</td></tr>';

    echo 
    $price;
    }
     
    AnOcToJI нравится это.
  7. AnOcToJI

    AnOcToJI

    Регистрация:
    28 дек 2012
    Сообщения:
    309
    Симпатии:
    188
    а если нужно вывести эту же надпись но ещё и перед группой?
    к примеру в массиве
    030-001
    030-002
    030-003
    031-001
    031-002
    031-003

    и нужно чтобы получилось так

    код 30
    030-001
    030-002
    030-003

    код 31
    031-001
    031-002
    031-003
     
  8. $iD

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

    Регистрация:
    13 мар 2012
    Сообщения:
    3.580
    Симпатии:
    1.482
    в этом случае не получится сделать с текущим массивом. Нужно собрать другой, в котором будет, как-то так:
    PHP:
    [
       
    '030' => [
         [
           [
           
    'code' => '030-001',
           
    'name' => 'Имя',
           
    'group' => [
             
    'группа',
           ],
           
    'price' => 800,
         ],
         [
           
    'code' => '030-002',
           
    'name' => 'Имя',
           
    'group' => [
             
    'группа',
           ],
           
    'price' => 800,
         ],
       ],
       
    '031' => [
         [
           [
           
    'code' => '031-001',
           
    'name' => 'Имя',
           
    'group' => [
             
    'группа',
           ],
           
    'price' => 800,
         ],
         [
           
    'code' => '031-002',
           
    'name' => 'Имя',
           
    'group' => [
             
    'группа',
           ],
           
    'price' => 800,
         ],
       ],
    ]
    тогда, просто будет вложенность циклов. foreach в foreach :Smile:
     
    AnOcToJI нравится это.
Статус темы:
Закрыта.