Проанализируйте ассоциативный массив, чтобы отобразить все значения в соответствии со значением другого индекса

#php #html #html-table #associative-array

Вопрос:

У меня есть таблица MySQL, и когда я извлекаю строки в виде ассоциативного массива, у меня уже есть таблица и все, что создано. Я просто не знаю, как разобрать ассоциативный массив, чтобы я мог отобразить его в строке.

Ответ №1:

Совершенно уверен, что, вероятно, есть более простые способы сделать это. Но вы могли бы использовать a foreach и сначала проверить, есть ли в текущем значении массива ключ диска, и если да, добавьте его в новый массив с именем диска в качестве ключа.

 $parsed_disks = [];

foreach ($unparsed_disks as $value) {
    if (array_key_exists('s3_dir_name', $value)) {
        $parsed_disks[$value['s3_dir_name']][] = $value;
    } else {
        $parsed_disks['UnkownDisk'][] = $value;
    }
}
 

Я не знаю имени переменной для массива, поэтому я использую $unparsed_disks ее в качестве заполнителя. Обратите внимание, что этот метод не будет сортировать новый массив в любом алфавитном или числовом порядке, так как вставка основана на старом массиве.

Это приведет к созданию следующей структуры в $parsed_disks массиве.

 array (
  'FileDrop1626801' => 
  array (
    0 => 
    array (
      'sender_id' => '123',
      'sender_email' => 'john.doe@gmail.com',
      'receiver_id' => '789',
      'receiver_email' => 'jane.doe@gmail.com',
      'file_name' => 'form.txt',
      's3_dir_name' => 'FileDrop1626801',
    ),
  ),
  'FileDrop1626809' => 
  array (
    0 => 
    array (
      'sender_id' => '123',
      'sender_email' => 'john.doe@gmail.com',
      'receiver_id' => '405',
      'receiver_email' => 'john.smith@gmail.com',
      'file_name' => 'form.txt',
      's3_dir_name' => 'FileDrop1626809',
    ),
    1 => 
    array (
      'sender_id' => '123',
      'sender_email' => 'john.doe@gmail.com',
      'receiver_id' => '789',
      'receiver_email' => 'jane.doe@gmail.com',
      'file_name' => 'form.txt',
      's3_dir_name' => 'FileDrop1626809',
    ),
  ),
)
 

Который затем можно повторить, причем первая итерация выполняется на каждом диске в массиве, а вторая-на каждой файловой транзакции, найденной на этом диске. Как показано в следующей демонстрации.

Комментарии:

1. Спасибо, Ким! Вы упомянули, что, вероятно, есть более простой способ сделать это. Вы знаете какие-нибудь другие способы? Потому что я действительно хочу сделать это более эффективным. Наличие 3 циклов foreach может быть немного неэффективным.