За последние 24 часа нас посетил 69961 программист и 5640 роботов. Сейчас ищут 1239 программистов ...

Разбор массива

Тема в разделе "PHP для новичков", создана пользователем Дато, 18 июл 2023.

  1. Дато

    Дато Активный пользователь

    С нами с:
    11 ноя 2021
    Сообщения:
    48
    Симпатии:
    1
    Добрый день, помогите разобраться, есть массив полученный из
    json_decode

    PHP:
    1. array(15) {
    2.   [0]=>
    3.   array(2) {
    4.     ["name"]=>
    5.     string(4) "name"
    6.     ["value"]=>
    7.     string(8) "круг"
    8.   }
    9.   [1]=>
    10.   array(2) {
    11.     ["name"]=>
    12.     string(5) "ed_iz"
    13.     ["value"]=>
    14.     string(4) "кг"
    15.   }
    16.   [2]=>
    17.   array(2) {
    18.     ["name"]=>
    19.     string(9) "quanitity"
    20.     ["value"]=>
    21.     string(2) "20"
    22.   }
    23.   [3]=>
    24.   array(2) {
    25.     ["name"]=>
    26.     string(5) "prise"
    27.     ["value"]=>
    28.     string(4) "1500"
    29.   }
    30.   [4]=>
    31.   array(2) {
    32.     ["name"]=>
    33.     string(3) "nds"
    34.     ["value"]=>
    35.     string(3) "20%"
    36.   }
    37.   [5]=>
    38.   array(2) {
    39.     ["name"]=>
    40.     string(4) "name"
    41.     ["value"]=>
    42.     string(18) "двигатель"
    43.   }
    44.   [6]=>
    45.   array(2) {
    46.     ["name"]=>
    47.     string(5) "ed_iz"
    48.     ["value"]=>
    49.     string(2) "т"
    50.   }
    51.   [7]=>
    52.   array(2) {
    53.     ["name"]=>
    54.     string(9) "quanitity"
    55.     ["value"]=>
    56.     string(2) "20"
    57.   }
    58.   [8]=>
    59.   array(2) {
    60.     ["name"]=>
    61.     string(5) "prise"
    62.     ["value"]=>
    63.     string(3) "150"
    64.   }
    65.   [9]=>
    66.   array(2) {
    67.     ["name"]=>
    68.     string(3) "nds"
    69.     ["value"]=>
    70.     string(3) "20%"
    71.   }
    72.   [10]=>
    73.   array(2) {
    74.     ["name"]=>
    75.     string(4) "name"
    76.     ["value"]=>
    77.     string(12) "полоса"
    78.   }
    79.   [11]=>
    80.   array(2) {
    81.     ["name"]=>
    82.     string(5) "ed_iz"
    83.     ["value"]=>
    84.     string(2) "т"
    85.   }
    86.   [12]=>
    87.   array(2) {
    88.     ["name"]=>
    89.     string(9) "quanitity"
    90.     ["value"]=>
    91.     string(3) "0,1"
    92.   }
    93.   [13]=>
    94.   array(2) {
    95.     ["name"]=>
    96.     string(5) "prise"
    97.     ["value"]=>
    98.     string(5) "70000"
    99.   }
    100.   [14]=>
    101.   array(2) {
    102.     ["name"]=>
    103.     string(3) "nds"
    104.     ["value"]=>
    105.     string(3) "20%"
    106.   }
    107. }
    как его превратить в такой?

    PHP:
    1. array(5) {
    2.   ["name"]=>
    3.   string(12) "полоса"
    4.   ["ed_iz"]=>
    5.   string(2) "т"
    6.   ["quanitity"]=>
    7.   string(3) "0,1"
    8.   ["prise"]=>
    9.   string(5) "70000"
    10.   ["nds"]=>
    11.   string(3) "20%"
    12. }
    PHP:
    1. foreach($data as $keys =>$value){
    2.    
    3.      $result[$value['name']] = $value['value'];
    4.    
    5.    
    6. }
    при разборе foreach получаю только последние данные. понимаю что он перезаписывает. но не совсем соображу как сделать так чтоб получить все данные.
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    перезаписывать должен только в том случае, если у разных записей значение поля "name" совпадает, а так-то верно всё.
     
  3. Дато

    Дато Активный пользователь

    С нами с:
    11 ноя 2021
    Сообщения:
    48
    Симпатии:
    1
    Спасибо. Но я просто не совсем соображу как мне с ним дальше работать. Хочется чтото вроде этого получить. А инпутов от куда все это приходит может быть разное количество.
    PHP:
    1. array(4) {
    2.    [0]=> array(2) { ["type"]=> string(1) "1" ["content"]=> string(5) "fasdf" }
    3.    [1]=> array(2) { ["type"]=> string(1) "2" ["content"]=> string(5) "image" }
    4.    [2]=> array(2) { ["type"]=> string(1) "1" ["content"]=> string(7) "heading" }
    5.    [3]=> array(2) { ["type"]=> string(1) "2" ["content"]=> string(9) "what ever" }
    6. }
     
  4. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    @Дато, какое отношение последний вопрос имеет к первому?
     
  5. Дато

    Дато Активный пользователь

    С нами с:
    11 ноя 2021
    Сообщения:
    48
    Симпатии:
    1
    Так эт один и тот же. Не соображу как из первого массива в начале темы. Сделать так, чтоб он выглядел как пример сообщения чуть выше.
     
  6. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    из первого последний никак, либо ты что-то скрываешь от нас )))
     
  7. Дато

    Дато Активный пользователь

    С нами с:
    11 ноя 2021
    Сообщения:
    48
    Симпатии:
    1
    Согласен наверно неправильно начал. вот такой блок завернут в <form>
    HTML:
    1. <div class="kanban__item" draggable="true" >
    2.                 <div class="form" style="background: #f7f3f3; height: 40px;">
    3.                     <div class="kanban__item-input" style="display: none;"></div>
    4.                     <input class="kanban__item-input" name="name" type="text" contenteditable="" style="" placeholder="Наименование"></input>
    5.                     <select class="kanban__item-input"  name="ed_iz" style="">
    6.                     <option value="">--Ед.изм--</option>
    7.                     <option value="кг">кг</option>
    8.                     <option value="т">т</option>
    9.                     <option value="метр">метр</option>
    10.                     </select>
    11.                     <input class="kanban__item-input" type="text"  name="quanitity" contenteditable="" placeholder="Количество" style=""></input>
    12.                     <input class="kanban__item-input" type="text" name="prise" contenteditable="" style="" placeholder="Цена"></input>
    13.                     <div class="kanban__item-input" contenteditable="" style="width:14%; height: 44px;" placeholder="Сумма">Сумма</div>
    14.                     <select class="kanban__item-input" name="nds" style="width: 6.2%; height: 44px;">
    15.                     <option value="1.2">--20%--</option>
    16.                     <option value=" ">без ндс</option>
    17.                     </select>
    18.                     <div class="kanban__item-input" contenteditable="" style="width:15%; height: 44px;" placeholder="Сумма">Сумма НДС</div>
    19.                     <div class="kanban__item-input" contenteditable="" style="width:15%; height: 44px;" placeholder="Сумма Ндс" >Всего с НДС</div>
    20.                 </div>
    21.             </div>
    при нажатии на кнопку если надо добавляется еще один такой блок в форму. и если нажать на кнопку отправить вся эта очень длинная форма улетает в php. в формате 1 массива. так вот как их сгрупировать чтоб это было похоже на такой массив
    PHP:
    1. array(4) {
    2.    [0]=> array(2) { ["type"]=> string(1) "1" ["content"]=> string(5) "fasdf" }
    3.    [1]=> array(2) { ["type"]=> string(1) "2" ["content"]=> string(5) "image" }
    4.    [2]=> array(2) { ["type"]=> string(1) "1" ["content"]=> string(7) "heading" }
    5.    [3]=> array(2) { ["type"]=> string(1) "2" ["content"]=> string(9) "what ever" }
    6. }
     
  8. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    и откуда в результирующем массиве "type" взяться должен?
     
  9. Дато

    Дато Активный пользователь

    С нами с:
    11 ноя 2021
    Сообщения:
    48
    Симпатии:
    1
    Ниоткуда. Это просто визуальный пример массива.
    --- Добавлено ---
    PHP:
    1. array(4) {
    2.    [0]=> array(2) { ["name"]=> string(1) "1" ["ed_iz"]=> string(5) "fasdf"  и т.д.}
    3.    [1]=> array(2) { ["name"]=> string(1) "2" ["ed_iz"]=> string(5) "image"  и т.д. }
    4.    [2]=> array(2) { ["name"]=> string(1) "1" ["ed_iz"]=> string(7) "heading"  и т.д.}
    5.    [3]=> array(2) { ["name"]=> string(1) "2" ["ed_iz"]=> string(9) "what ever"  и т.д.}
    6. }
     
  10. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    ну, на абстрактный вопрос можно получить максимум абстрактный ответ
     
  11. Дато

    Дато Активный пользователь

    С нами с:
    11 ноя 2021
    Сообщения:
    48
    Симпатии:
    1
    почему абстрактный? Только ключи смутили? Так я исправил.
     
  12. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Очень не хватает вывода PHP: var_export - Manual вместо var_dump.
     
  13. Дато

    Дато Активный пользователь

    С нами с:
    11 ноя 2021
    Сообщения:
    48
    Симпатии:
    1
    PHP:
    1.   0 =>
    2.   array (
    3.     'name' => 'name',
    4.     'value' => 'имя',
    5.   ),
    6.   1 =>
    7.   array (
    8.     'name' => 'ed_iz',
    9.     'value' => 'кг',
    10.   ),
    11.   2 =>
    12.   array (
    13.     'name' => 'quanitity',
    14.     'value' => 'кол-во',
    15.   ),
    16.   3 =>
    17.   array (
    18.     'name' => 'prise',
    19.     'value' => '1111',
    20.   ),
    21.   4 =>
    22.   array (
    23.     'name' => 'nds',
    24.     'value' => '1.2',
    25.   ),
    26.   5 =>
    27.   array (
    28.     'name' => 'name',
    29.     'value' => 'имя2',
    30.   ),
    31.   6 =>
    32.   array (
    33.     'name' => 'ed_iz',
    34.     'value' => 'т',
    35.   ),
    36.   7 =>
    37.   array (
    38.     'name' => 'quanitity',
    39.     'value' => 'кол-во',
    40.   ),
    41.   8 =>
    42.   array (
    43.     'name' => 'prise',
    44.     'value' => '222',
    45.   ),
    46.   9 =>
    47.   array (
    48.     'name' => 'nds',
    49.     'value' => '1.2',
    50.   ),
    51. )
     
  14. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Код (Text):
    1. $result      = array();
    2. $current_key = '';
    3.  
    4. foreach($data as $value)
    5. {
    6.     if($value['name'] == 'name')
    7.     {
    8.         $current_key = $value['value'];
    9.     }
    10.  
    11.     $result[$current_key][$value['name']] = $value['value'];
    12. }
    13.  
    14. print_r($result);
     
  15. Дато

    Дато Активный пользователь

    С нами с:
    11 ноя 2021
    Сообщения:
    48
    Симпатии:
    1
    Спасибо)
     
  16. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Если name не уникален, то в $current_key следует вставить счетчик