Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多维有序阵列_Php_Arrays - Fatal编程技术网

Php 多维有序阵列

Php 多维有序阵列,php,arrays,Php,Arrays,我有一个如下所示的数组: $cars = array ( array( 'a' => 'audi', 'b' => 'a4'), array( 'a' => 'peugeot', 'b' => '306'), array( 'a' => 'audi', 'b' => 'a4'), array( 'a' => 'audi', 'b' => 'a5'), array(

我有一个如下所示的数组:

$cars = array (
  array(
    'a' => 'audi',
    'b' => 'a4'),
  array(
    'a' => 'peugeot',
    'b' => '306'),
  array(
    'a' => 'audi',
    'b' => 'a4'),
  array(
    'a' => 'audi',
    'b' => 'a5'),
  array(
    'a' => 'peugeot',
    'b' => '106'),
  array(
    'a' => 'peugeot',
    'b' => '106'),
);
我需要将这样的数组订购到(id与名称相同):

因此,汽车品牌需要根据所统计的车型进行分组

我已经有了这个密码;但这仅适用于组部分,计数部分缺失

function mergeAndOrder($data){

    // set group arrays
    $i = 0; $group1 = array();

    // loop trough array
    $array = array(); $array2 = array();        
    if($data != null){
        foreach($data AS $row){

            // search and order level1
            $search = array_search($row->a,$group1);

            // this object is not found
            if(is_int($search) == false){

                $group1[$i] = $row->a;
                $array[$i]['id'] = $row->a;
                $array[$i]['name'] = $row->a;
                $array[$i]['data'] = array();

                $i++;   

            }               

        }                               
    }

    return $array;
}
有人知道这个案子的解决办法吗?谢谢

---输入(部分)--- a=本例中的租赁公司

Array
(
    [0] => stdClass Object
        (
            [b] => AUDI
            [a] => LPN
        )

    [1] => stdClass Object
        (
            [b] => AUDI
            [a] => LPN
        )

    [2] => stdClass Object
        (
            [b] => AUDI
            [a] => LPN
        )

    [3] => stdClass Object
        (
            [b] => AUDI
            [a] => LPN
        )
---输出(部分)---


如果我没弄错你的问题,这应该是你想要的

function mergeAndOrder ($data) {

    $output = array();
    foreach ($data as $item) {

        $id    = $item->a;
        $value = $item->b;

        if (!array_key_exists($id, $output)) {
            $output[$id] = array('id' => $id, 'name' => $id, 'data' => array());
        }

        if (!array_key_exists($value, $output[$id]['data'])) {
            $output[$id]['data'][$value] = 0;
        }

        $output[$id]['data'][$value]++;
    }

    // Order by name element
    uasort($output, function ($a, $b) {
        return strcasecmp($a['name'], $b['name']);
    });

    return $output;
}
输出:

Array
(
    [audi] => Array
        (
            [id] => audi
            [name] => audi
            [data] => Array
                (
                    [a4] => 2
                    [a5] => 1
                )

        )

    [peugeot] => Array
        (
            [id] => peugeot
            [name] => peugeot
            [data] => Array
                (
                    [306] => 1
                    [106] => 2
                )

        )
)

什么是
echo“”。打印($data,1)。“”输出?用php代码plz发布输入和输出数组。@JelleP看起来完全不同。现在你的输入是一个类,它有不同的属性,基本上只有4个相同的对象。@AndreschSerj关于输入数组你是对的。它确实是一个对象,但情况保持不变。我的问题清楚了吗?还是有什么东西还没有解释?好吧,你的意见改变了。真奇怪。Anywho:您执行数组搜索以查找已经存在的条目。您只需要使用结果来更改状态。考虑阅读AARYAL搜索文档
function mergeAndOrder ($data) {

    $output = array();
    foreach ($data as $item) {

        $id    = $item->a;
        $value = $item->b;

        if (!array_key_exists($id, $output)) {
            $output[$id] = array('id' => $id, 'name' => $id, 'data' => array());
        }

        if (!array_key_exists($value, $output[$id]['data'])) {
            $output[$id]['data'][$value] = 0;
        }

        $output[$id]['data'][$value]++;
    }

    // Order by name element
    uasort($output, function ($a, $b) {
        return strcasecmp($a['name'], $b['name']);
    });

    return $output;
}
Array
(
    [audi] => Array
        (
            [id] => audi
            [name] => audi
            [data] => Array
                (
                    [a4] => 2
                    [a5] => 1
                )

        )

    [peugeot] => Array
        (
            [id] => peugeot
            [name] => peugeot
            [data] => Array
                (
                    [306] => 1
                    [106] => 2
                )

        )
)