【问题标题】:Array foreach modification数组 foreach 修改
【发布时间】:2015-07-06 10:24:13
【问题描述】:

我有一个这样的数组$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..

这里是我用的简单的foreach,但是只能打印cust_type或者balance

$cols = array_keys($testing);

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

请提供帮助。 谢谢。

【问题讨论】:

  • 数组是否总是只包含 2 个子数组?
  • @Andrew 是的,数组总是只包含 2 个子数组

标签: php arrays foreach


【解决方案1】:

考虑一下这个sn-p,

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'] 数组中的成员数量相同。否则你会看到一个警告。

【讨论】:

  • 嗨,谢谢你的回答。但我需要为每个数据添加标识符。例如:{cust_type:family,balance:1234},{cust_type:corporate,balance:12345},等等.. json_encode 只会产生 {"Family":"420946131.01","Corporate":"41272033223.93"}。因此我认为我们需要在那里放置循环。
【解决方案2】:

使用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"]));

测试

[akshay@localhost 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";

?>

输出

[akshay@localhost 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
    }
]

【讨论】:

  • 做得很好,我试图用array_map() 来解决这个问题,但无法实现。
  • @Akshay:感谢您的帮助
猜你喜欢
  • 2012-04-18
  • 2019-09-25
  • 2021-11-26
  • 2021-08-03
  • 2013-01-15
相关资源
最近更新 更多