Php 如何从关联数组中的数组数据值生成数组键

Php 如何从关联数组中的数组数据值生成数组键,php,arrays,laravel,multidimensional-array,Php,Arrays,Laravel,Multidimensional Array,我有一个多维关联数组,它有一组数组。我想从某个数组值更改数组索引值 我已经尝试了一些数组函数,但是我的数组也包含一些空数组,所以laravel函数keyBy没有给我想要的结果 $arr1=array(0 =>array(),1=>array(0=>array('quan'=>10,'handle' => 'baroque'),1 =>array('quan'=>20,'handle' => 'baroque')), 2 =>array

我有一个多维关联数组,它有一组数组。我想从某个数组值更改数组索引值

我已经尝试了一些数组函数,但是我的数组也包含一些空数组,所以laravel函数keyBy没有给我想要的结果

$arr1=array(0 =>array(),1=>array(0=>array('quan'=>10,'handle' => 'baroque'),1 =>array('quan'=>20,'handle' => 'baroque')),
    2 =>array (0 =>array('quan' => 5,'handle' => 'adidas')));
我的预期结果数组必须如下所示

$arr2=array(0 =>array(),'baroque'=>array(0=>array('quan'=>10,'handle' => 'baroque'),1 =>array('quan'=>20,'handle' => 'baroque')),
    'adidas' =>array (0 =>array('quan' => 5,'handle' => 'adidas')));

您可以使用经典的
foreach
。使用
isset
检查元素0上的句柄是否存在,如果存在,则将其用作键

$arr1 = //...
$result = array();
foreach($arr1 as $key => $val) {
    if (is_array($val) && isset($val[0]["handle"])) $result[ $val[0]["handle"] ] = $val;
    else  $result[$key] = $val;
}
$result
将是:

Array
(
    [0] => Array
        (
        )

    [baroque] => Array
        (
            [0] => Array
                (
                    [quan] => 10
                    [handle] => baroque
                )

            [1] => Array
                (
                    [quan] => 20
                    [handle] => baroque
                )

        )

    [adidas] => Array
        (
            [0] => Array
                (
                    [quan] => 5
                    [handle] => adidas
                )

        )

)

通过直接在
句柄
处分组为键,可以无条件使用

$result = [];
foreach ($arr as $key => $value) {
    if (!empty($value)) {
        foreach ($value as $key1 => $value1) {
            $result[$value1['handle']][] = $value1;
        }
    } else {
        $result[] = $value;
    }
}

输出:-

Array
(
    [0] => Array
        (
        )

    [baroque] => Array
        (
            [0] => Array
                (
                    [quan] => 10
                    [handle] => baroque
                )

            [1] => Array
                (
                    [quan] => 20
                    [handle] => baroque
                )

        )

    [adidas] => Array
        (
            [0] => Array
                (
                    [quan] => 5
                    [handle] => adidas
                )

        )

)
试试这个

$res = [];
foreach($x as $key => $value)
{
  if(empty($value))
  {
    $res[] = $value;
  }
  else
  {
    foreach($value as $v => $k)
    {
        if(array_key_exists($k['handle'],$res))
        {
            $res[$k['handle']][] = ['quan' => $k['quan'],'handle' => $k['handle']];
        }
        else
        {
            $res[$k['handle']][0] = ['quan' => $k['quan'],'handle' => $k['handle']];
        }
    }
  }

}
结果是这样的

 Array
(
[0] => Array
    (
    )

[baroque] => Array
    (
        [0] => Array
            (
                [quan] => 10
                [handle] => baroque
            )

        [1] => Array
            (
                [quan] => 20
                [handle] => baroque
            )

    )

[adidas] => Array
    (
        [0] => Array
            (
                [quan] => 5
                [handle] => adidas
            )

    )

)

您忘记发布您的代码测试使用laravel收集函数groupBy
$collection\u grouped=collect($arr1)$collection=$collection->groupBy(函数($item,$key){$item->quan})->values()->all()