如何将这种阵列结合PHP [英] How to combine this arrays PHP

查看:392
本文介绍了如何将这种阵列结合PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想下面所示的三个阵列组合,我不知道该怎么做,我想借此公司code 每个阵列和使之成为一个阵列。

I want to combine the three arrays shown below and I don't know how to do that, I want to take the companyCode of each array and make it for one array.

我有一个这样的数组,

Array(
   [0] => Array(
             [companyCode] => SimpleXMLElement Object(
                            [0] => 'AD'
                     )
             [name] => SimpleXMLElement Object(
                            [0] => 'NYCT01'
                     )
             [vehicleRentalPrefType] => SimpleXMLElement Object(
                            [0] => 'ECAR'
                     )
             [rateAmount] => SimpleXMLElement Object(
                            [0] => '295.62'
                     )
         );
   [1] => Array(
             [companyCode] => SimpleXMLElement Object(
                            [0] => 'AD'
                     )
             [name] => SimpleXMLElement Object(
                            [0] => 'NYCT01'
                     )
             [vehicleRentalPrefType] => SimpleXMLElement Object(
                            [0] => 'SCAR'
                     )
             [rateAmount] => SimpleXMLElement Object(
                            [0] => '356.25'
                     )
   [2] => Array(
             [companyCode] => SimpleXMLElement Object(
                            [0] => 'AD'
                     )
             [name] => SimpleXMLElement Object(
                            [0] => 'NYCT01'
                     )
             [vehicleRentalPrefType] => SimpleXMLElement Object(
                            [0] => 'PCAR'
                     )
             [rateAmount] => SimpleXMLElement Object(
                            [0] => '562.36'
                     )
          )
)

我想这样的:

Array(
    [AD] => Array(
              [NYCT01] => Array(
                        [ECAR] => Array(
                                  [0] => '295.62'
                          )
                        [SCAR] => Array(
                                  [0] => '356.25'
                          )
                        [PCAR] => Array(
                                  [0] => '562.36'
                          )
                 )
        )
)

我怎么能做到这一点,我试着做一些循环,但我没有得到任何结果,请帮助。

How can I do that, I tried to do some loops but I'm getting no result please help.

推荐答案

下面是我创建的群功能阵列几天前:

Here's a function I created to group arrays a couple of days ago:

为PHP 5.3及以上

class Fx
{
    public static function GroupBy(&$arr, $groupby, $valueFunctions = null)
    {
        $groupby = is_array($groupby) ? $groupby : array($groupby);
        $valueFunctions = is_array($valueFunctions) ? $valueFunctions : array($valueFunctions);

        $group1 = array();
        foreach($arr as $elem)
        {
            $group = is_callable($groupby[0]) ? $groupby[0]($elem) : $elem[$groupby[0]];
            $group1[$group][] = is_callable($valueFunctions[0]) ? $valueFunctions[0]($elem) : (is_null($valueFunctions[0]) ? $elem : $elem[$valueFunctions[0]]);
        }

        if(count($groupby) > 1)
        {
            $group2 = array();
            $gb_next = array_slice($groupby, 1);
            $vf_next = (count($valueFunctions) > 1) ? array_slice($valueFunctions, 1) : null;
            foreach($group1 as $group => $elems)
            {
                $group2[$group] = self::GroupBy($elems, $gb_next, $vf_next);
            }

            return $group2;
        }

        return $group1;
    }
}

> = 5.3例如

$new = Fx::GroupBy(
    $arr, 
    array(
        function($elem){ return (string)$elem['companyCode'][0]; },
        function($elem){ return (string)$elem['name'][0]; },
        function($elem){ return (string)$elem['vehicleRentalPrefType'][0]; }
    ),
    array(
        null,
        null,
        function($elem){ return (float)$elem['rateAmount'][0]; }
    )
);

print_r($new);

为PHP 5.2,并可能在

class Fx
{
    public static function GroupBy(&$arr, $groupby, $valueFunctions = null)
    {
        $groupby = is_array($groupby) ? $groupby : array($groupby);
        $valueFunctions = is_array($valueFunctions) ? $valueFunctions : array($valueFunctions);

        $group1 = array();
        foreach($arr as $elem)
        {
            $gbIsFunc = (substr($groupby[0], 0, 5) == 'func:');
            $gbFunc = substr($groupby[0], 5);

            $vIsFunc = (substr($valueFunctions[0], 0, 5) == 'func:');
            $vFunc = substr($valueFunctions[0], 5);

            $group = $gbIsFunc ? $gbFunc($elem) : $elem[$groupby[0]];
            $group1[$group][] = $vIsFunc ? $vFunc($elem) : (is_null($valueFunctions[0]) ? $elem : $elem[$valueFunctions[0]]);
        }
        if(count($groupby) > 1)
        {
            $group2 = array();
            $gb_next = array_slice($groupby, 1);
            $vf_next = (count($valueFunctions) > 1) ? array_slice($valueFunctions, 1) : null;
            foreach($group1 as $group => $elems)
            {
                $group2[$group] = self::GroupBy($elems, $gb_next, $vf_next);
            }

            return $group2;
        }

        return $group1;
    }
}

< = 5.2例如

function gbFunc1($elem){ return (string)$elem['companyCode'][0]; }
function gbFunc2($elem){ return (string)$elem['name'][0]; }
function gbFunc3($elem){ return (string)$elem['vehicleRentalPrefType'][0]; }
function vFunc3($elem){ return (float)$elem['rateAmount'][0]; }

$new = Fx::GroupBy($arr, array('func:gbFunc1', 'func:gbFunc2', 'func:gbFunc3'), array(null, null, 'func:vFunc3'));

print_r($new);

这篇关于如何将这种阵列结合PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆