преобразовать SQL-запрос в массив - PullRequest
1 голос
/ 11 июня 2019

Я несколько дней пытался сделать строку запроса массивом, но пока не увенчался успехом.У меня есть «KD.1», «KD.2», «KD.3», «KD.4», «KD.5», «KD.1», «KD.2», «KD.3»,'KD.4', 'KD.5' в строке mysql и я хочу сделать это массивом, чтобы я получил 10 массивов, а не 1. Затем я буду использовать его для объединения с другой строкой, имеющей тот же шаблон.Похоже на это 0,0,1,1,0,0,1,1,1,0

while($row = $result->fetch_array(MYSQLI_ASSOC))  
  {  
    $keys = Array($row['listkd']);
    $values = Array($row['rightval']);
    $final_array [$row['testnis']]= array_combine_($keys, $values);
  }

моя функция array_combine_ я получаю от здесь

function array_combine_($keys, $values){
    $result = array();

    foreach ($keys as $i => $k) {
     $result[$k][] = $values[$i];
     }

    array_walk($result, function(&$v){
     $v = (count($v) == 1) ? array_pop($v): $v;
     });

    return $result;
}

Я всегда получаю один массив, а не десять, поэтому его нельзя объединить двумя массивами.Что я хочу, чтобы результат был следующим:

[8131] => Array ( 
  [KD.1] => Array ( [0] => 0 [1] => 0 ) 
  [KD.2] => Array ( [0] => 0 [1] => 1 ) 
  [KD.3] => Array ( [0] => 1 [1] => 1 ) 
  [KD.4] => Array ( [0] => 1 [1] => 1 ) 
  [KD.5] => Array ( [0] => 0 [1] => 0 ) 
)
[8173] => Array ( 
  [KD.1] => Array ( [0] => 0 [1] => 0 ) 
  [KD.2] => Array ( [0] => 0 [1] => 1 ) 
  [KD.3] => Array ( [0] => 1 [1] => 1 )
  [KD.4] => Array ( [0] => 1 [1] => 1 ) 
  [KD.5] => Array ( [0] => 0 [1] => 0 ) 
)

1 Ответ

2 голосов
/ 11 июня 2019

Array($row['listkd']) не будет анализировать строку как отдельные элементы массива.Он просто создает массив с одним элементом, который представляет собой все содержимое столбца listkd.

Вы можете использовать str_getcsv() для анализа строки.Он разделит его на запятые и проанализирует кавычки как разделители вокруг значений.

while($row = $result->fetch_array(MYSQLI_ASSOC))  
  {  
    $keys = str_getcsv($row['listkd'], ",", "'");
    $values = str_getcsv($row['rightval'], ",", "'");

    $final_array [$row['testnis']]= array_combine_($keys, $values);
  }
...