2015-01-23 3 views
1

Я оптимизирую код. Некоторый код я могу изменить, некоторые не могу. Я запрашиваю базу данных и проверяю ее на массив json_decode(), который является новым. Я нахожу различия и добавляю или удаляю из базы данных по мере необходимости.Как создать массив с массивом key/value?

UPDATE: Это мой запрос:

$ sQuery = «SELECT column1, column2 FROM my_table WHERE ID = my_id;

UPDATE2:

ОК, так что мой запрос переходит в пользовательскую функцию запроса, которую я не могу изменить, и это то, что выходит:

mysqli_result Object 
    (
     [current_field] => 0 
     [field_count] => 2 
     [lengths] => 
     [num_rows] => 2 
     [type] => 0 
    ) 

Я хочу разобрать результат таким образом, что организовано так:

Array 
(
    [0] => Array 
      (
       [column1] => value 
      ) 
    [1] => Array 
      (
       [column2] => value 
      ) 
) 

// конец Update 2

Я стучал головой чувство глупо пытаться разобрать первый массив, чтобы соответствовать организация второго массива. Помоги пожалуйста?

Вот что я пробовал:

while ($aRows = $aResults->fetch_assoc()) { 
    foreach ($aRows as $iKey => $sValue) { 

     if ($iKey % 2 == 0) 
      $aPreviousList[$iKey][] = $sValue; 

     if ($iKey % 2 == 1) 
      $aPreviousList[$iKey][] = $sValue; 
    } 
} 

Но выходит так:

Array 
(
    [ixfChangeMethod] => Array 
     (
      [0] => 16 
      [1] => 11 
     ) 

    [sDetails] => Array 
     (
      [0] => some details about 16 
      [1] => some details about 11 
     ) 

) 

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

+0

'FETCH_ASSOC()' должна возвращать строку, в которой каждый элемент массива является имя столбца ... то, что делает ваш запрос выглядеть? – brazilianldsjaguar

+0

Если вы знаете, что у вас всегда будет четное количество возвращенных строк, вы можете просто получить вторую строку внутри своего цикла; первая строка будет содержать ваш ключ, а вторая - ваше значение. – jeroen

+0

У меня появятся четные или четные строки –

ответ

6

Я изменил код, это лучше?

while ($aRow = $aResults->fetch_row()) { 
    $aPreviousList[] = array($aRow[0] => $aRow[1]); 
} 
+0

Я дважды проверял, чтобы убедиться, что я изменил все переменные на правильные переменные в моем коде, но это вернуло пустой массив.: -/ –

+0

Это просто делает массив с массивом, содержащим только столбец «details». 'Массив ( [0] => Массив ( [16] => некоторые детали ) [1] => Массив ( [11] => asdfasdfasdasd ) ) ' –

+0

ahh wait !! неважно, что это то, что нужно! –

1

fetch_assoc возвращает ассоциативный массив.
fetch_row возвращает числовой массив.

Так что используйте fetch_row вместо fetch_assoc.

1

Вы можете попробовать это

while ($aRows = $aResults->fetch_assoc()) 
{ 
    $aPreviousList[]=array($aRows['column1']=>$aRows['column2']); 
} 

print_r($aPreviousList); 
Смежные вопросы