2016-03-02 5 views
1

У меня есть цикл, который возвращает Еогеасп мульти-массив из базы данных и я хочу, чтобы преобразовать этот массив в несколько массива в JSON,как преобразовать мульти массив JSON мульти массив

, как это сделать?

пример PHP массив

Array 
(
    [0] => Array 
     (
      [it_code] => 2894 
      [it_quantity] => 300 
      [it_price] => 0 
      [it_notes] => 
     ) 

    [1] => Array 
     (
      [it_code] => 2894 
      [it_quantity] => 284 
      [it_price] => 0 
      [it_notes] => 
     ) 

    [2] => Array 
     (
      [it_code] => 2894 
      [it_quantity] => 4 
      [it_price] => 0 
      [it_notes] => 
     ) 

    [3] => Array 
     (
      [it_code] => 2894 
      [it_quantity] => 3 
      [it_price] => 0 
      [it_notes] => 
     ) 

) 

я хочу вернулся JSON, чтобы быть как этот формат

[ 
      ['2894', 300, 0,''], 
      ['2894', 284, 0,''], 
      ['2894', 4, 0,''], 
      ['2894', 3, 0,''], 
      ['2894', 10, 0, ''] 
     ] 

мой код, как этот

$this->db->where("it_parent_item", $parent_id); 
$this->db->select("d_items.it_code,d_items_type.it_ty_ar_desc,d_items.it_quantity,d_items.it_price,it_notes"); 
$this->db->join('d_items_type','d_items_type.it_ty_id=d_items.it_type','left'); 
$this->db->from("d_items"); 
$result = $this->db->get()->result_array(); 


echo "<pre>"; 
print_r($result); 
echo "</pre>"; 
+0

является [json_encode()] (http://php.net/manual/en/function.json-encode.php), что вы ищете? – Henders

+0

@Henders, который не удалит «ключи» (если это то, что ищет ОП), но это стоит того. Итак, вам нужно удалить ключи ('it _ ..')? – FirstOne

+0

Хороший вопрос, не думал о переформатировании ... – Henders

ответ

1

Вы можете использовать array_values() и array_walk_recursive() преобразовать целое число к строке

$newArray = array(); 
foreach($sourceArray as $element) { 
    $newArray[] = array_values($element); 
} 

array_walk_recursive($newArray, 
function(&$value, $key){ 
    $value = (string)$value; 
}); 

print_r (json_encode($newArray)); 
+0

@FirstOne большое спасибо! Я исправлю его –

0

кажется мне, как вы хотите, чтобы петли через ваш массив так отформатирован, как вы хотите в PHP, а затем преобразовать этот PHP массив в JSON:

$dataArray = array(); //The array containing your values 
$jsonArray = array(); //The array which will be formatted for json 

foreach($dataArray as $value){ 
    $keylessValues = array_values($value); 
    $jsonArray[] = $keylessValues; 
} 

$jsonArray = json_encode($jsonArray); //This is now a JSON array storing your values 

Что мы делаем здесь, это пройти через массив а затем берем только значения с array_values() и помещаем их в новый индекс в нашем $jsonArray.

После того, как мы переехали через весь массив мы можем преобразовать наш видеофайл и густонаселенный массив в JSON с json_encode()

Стоит отметить, что ваши ценности, которые установлены в качестве '' придут через, как null. Если вам нужны эти значения как '' вместо null, посмотрите на ответ @FirstOne.

+1

Просто обратите внимание, что вместо '' '', это возвращает 'null'. – FirstOne

+0

Спасибо, я обнаружил, что в своем тесте, но забыл положить его! – Henders

0

Вот исходный массив (показано как массив PHP, но так же, как ваш пост):

$initialArray = array(
    array(
     "it_code"  => 2894, 
     "it_quantity" => 300, 
     "it_price" => 0, 
     "it_notes" => '', 
    ), 
    array(
     "it_code"  => 2894, 
     "it_quantity" => 284, 
     "it_price" => 0, 
     "it_notes" => '', 
    ), 
    array(
     "it_code"  => 2894, 
     "it_quantity" => 4, 
     "it_price" => 0, 
     "it_notes" => '', 
    ), 
    array(
     "it_code"  => 2894, 
     "it_quantity" => 3, 
     "it_price" => 0, 
     "it_notes" => '', 
    ), 
); 

Вы можете цикл по каждому элементу, присваивающей только значения для нового набора массивов, как это :

$newArray = array(); 

foreach ($initialArray as $subArray) 
{ 
    $newArray[] = array_values($subArray); 
} 

Результирующий массив будет выглядеть следующим образом:

[[2894,300,0,""],[2894,284,0,""],[2894,4,0,""],[2894,3,0,""]] 
+1

'синтаксическая ошибка, неожиданная ','' on: 'it_notes =>,' – FirstOne

+0

Исправлено, эти надоедливые значения null для 'it_notes'. –

+0

Несомненно, зависит то, что пользователь хочет. Но, надеюсь, это заставит его начать переформатирование массива, и, возможно, SQL-запрос может вернуть более полезные значения вместо нуля. –

1

Обратите внимание, что другие ответы будут г ive null вместо ''.

Таким образом, без использования array_values, этот код возвращает все значения, но в случае, если есть какой-либо нуль, то она возвращает '' вместо (как ожидается, в этом вопросе):

$arr = array(); 
foreach($foo as $value){ 
    $tmp = array(); 
    foreach($value as $v){ 
     $tmp[] = $v===null ? '' : $v; 
    } 
    $arr[] = $tmp; 
} 

echo json_encode($arr); 

Выход:

[[2894,300,0, ""], [2894,284,0, ""], [2894,4,0, ""], [2894,3,0, ""]]

[ 
    [2894,300,0,""], 
    [2894,284,0,""], 
    [2894,4,0,""], 
    [2894,3,0,""] 
] 

это копируемый массив:

$foo = array 
(
    0 => array 
     (
      'it_code' => 2894, 
      'it_quantity' => 300, 
      'it_price' => 0, 
      'it_notes' => null 
     ), 

    1 => Array 
     (
      'it_code' => 2894, 
      'it_quantity' => 284, 
      'it_price' => 0, 
      'it_notes' => null 
     ), 

    2 => Array 
     (
      'it_code' => 2894, 
      'it_quantity' => 4, 
      'it_price' => 0, 
      'it_notes' => null 
     ), 

    3 => Array 
     (
      'it_code' => 2894, 
      'it_quantity' => 3, 
      'it_price' => 0, 
      'it_notes' => null 
     ), 

); 
+0

Отличное решение! Будет ли это более интенсивным, чем использование 'array_values ​​()'? – Henders

+1

TBH, я не знаю, будет ли он более интенсивным, но в этом случае 'array_values' не возвращает' ''', когда значение 'null' ... @Henders – FirstOne

Смежные вопросы