2015-07-06 2 views
3

У меня есть массив $testing, как это:Массив Еогеасп модификация

Array ( 
    [CUST_TYPE] => 
     Array ( 
      [0] => Family 
      [1] => Regular 
      [2] => Corporate 
      [3] => Premium) 
    [TOTAL_BALANCE] => 
     Array ( 
      [0] => 420946131.01 
      [1] => 41272033223.93 
      [2] => 38873647942.4 
      [3] => 10465337565.61) 
     ) 

Мне нужно конвертировать (печать) этот массив в нечто вроде этого:

{ 
cust_type : Family, 
balance : 420946131.01 
}, 
{ 
cust_type : Regular , 
balance : 41272033223.93 
}, 
and so on.. 

Вот простой Еогеасп, что я использовал, но он может печатать только cust_type или balance

$cols = array_keys($testing); 

foreach ($testing[$cols[1]] as $i => $j) { 
     echo '{cust_type : ' . $j . 
      ', balance : ' . $<What should I print??> . '},';   
    } 

пожалуйста, пожалуйста, помогать. Спасибо.

+0

Будет массив всегда состоит из только 2 под-массива? – Andrew

+0

@Andrew Да, массив всегда будет состоять только из 2 вспомогательных массивов –

ответ

1

Использование array_map (PHP 4> = 4.0.6, PHP 5)

$json = json_encode(array_map(function($a,$b){ return array("cust_type"=>$a,"balance"=>$b);},$array["CUST_TYPE"],$array["TOTAL_BALANCE"])); 

Тест

[[email protected] tmp]$ cat test.php 
<?php 

$array = array( 
      "CUST_TYPE" => array( 
           'Family', 
           'Regular', 
           'Corporate', 
           'Premium' 
           ), 
      "TOTAL_BALANCE" => array( 
           420946131.01, 
           41272033223.93, 
           38873647942.4 , 
           10465337565.61 
          ) 
      ); 


// PHP 4,5 
$json = json_encode(array_map(function($a,$b){ return array("cust_type"=>$a,"balance"=>$b);},$array["CUST_TYPE"],$array["TOTAL_BALANCE"]),JSON_PRETTY_PRINT); 

// Input 
print_r($array); 

// Output 
print $json."\n"; 

?> 

Выход

[[email protected] tmp]$ php test.php 
Array 
(
    [CUST_TYPE] => Array 
     (
      [0] => Family 
      [1] => Regular 
      [2] => Corporate 
      [3] => Premium 
     ) 

    [TOTAL_BALANCE] => Array 
     (
      [0] => 420946131.01 
      [1] => 41272033223.93 
      [2] => 38873647942.4 
      [3] => 10465337565.61 
     ) 

) 
[ 
    { 
     "cust_type": "Family", 
     "balance": 420946131.01 
    }, 
    { 
     "cust_type": "Regular", 
     "balance": 41272033223.93 
    }, 
    { 
     "cust_type": "Corporate", 
     "balance": 38873647942.4 
    }, 
    { 
     "cust_type": "Premium", 
     "balance": 10465337565.61 
    } 
] 
+1

красиво сделано, я пытался выяснить, используя 'array_map()', но не смог достичь. – Viral

+1

@Akshay: Благодарим за помощь –

+0

@KingGoeks: Добро пожаловать –

3

Рассмотрим фрагмент,

for($i=0; $i<count($your_array['CUST_TYPE']); $i++) 
{ 
    $required[] = [ 'cust_type' => $your_array['CUST_TYPE'][$i], 
        'balance' => $your_array['TOTAL_BALANCE'][$i] ]; 
} 

$required = json_encode($required); 

выход будет,

[{"cust_type":"Family","balance":420946131.01},{"cust_type":"Regular","balance":41272033223.93},{"cust_type":"Corporate","balance":38873647942.4},{"cust_type":"Premium","balance":10465337565.61}] 

Для другого формата, Вы можете использовать array_combine() создает массив с первым аргументом в качестве ключей и второй как значения,

Формат, который вы указываете, json Итак, json_encode() сделает это за вас,

$required = array_combine($your_array['CUST_TYPE'], $your_array['TOTAL_BALANCE']); 

$required = json_encode($required); 

Теперь $required является строка с нужным значением. Который,

{"Family":420946131.01,"Regular":41272033223.93,"Corporate":38873647942.4,"Premium":10465337565.61} 

Примечание: Убедитесь, что у вас есть такое же количество членов в обеих $your_array['CUST_TYPE'] и $your_array['TOTAL_BALANCE'] массивов внутри вашего входного массива. В противном случае вы увидите предупреждение.

+0

Привет, спасибо за ответ. Но мне нужно добавить идентификатор для каждой информации. Например: {cust_type: family, balance: 1234}, {cust_type: corporate, balance: 12345} и т. Д. Json_encode будет производить только {«Семья»: «420946131.01», «Корпоративный»: «41272033223.93»}. Поэтому я думаю, что нам нужно поставить петлю. –

+0

Check my edit please – Viral

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