将SQL查询转换为数组

时间:2019-06-10 22:23:52

标签: php mysql arrays split

我已经尝试了几天,以使我的查询行作为数组,但是还没有成功。 我有'KD.1','KD.2','KD.3','KD.4','KD.5','KD.1','KD.2','KD.3', mysql行中的'KD.4','KD.5'并想将其作为数组,因此我将获得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_我从here获得

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 个答案:

答案 0 :(得分:2)

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);
  }