场景,把键相同的多个数组,合并到键下面的多个数组里面,图一是原数组,图二是我们想要的结果数组
代码
public function test()
{
$arr = [
[ 1 => [ 1 , 11 ], ],
[ 1 => [ 11 , 22 ], ],
[ 1 => [ 3 , 33 ], ],
[ 2 => [ 2 , 11 ], ],
[ 2 => [ 2 , 22 ], ],
[ 3 => [ 3 , 33 ], ],
];
$data = $this->test3($arr);
dd($arr1);
}
public function test3($arr)
{
foreach ($arr as $key => $value)
{
foreach ($value as $key1 => $value1){
$result[$key1][] = $value1;
}
}
return $result;
}
虽然这个问题很简单,但是我费了好多时间。但是把解决思路做个总结吧。对于以后的思考会有帮助
思路1,我想得到键。取相同的键。第1步测试,我想得到键。那么我们先试试打印$key值。我们发现不是想要的结果
思路1,第2步测试,我们打印$value看看。发现也不是我们要的结果。但是我们把数组点开后。发现这个$value再遍历一次,即可得到我们想要的键
思路1,第三步测试。我们打印$key1,查看下,得到了我们要的键。
思路2,第一步测试.找到了相同的键,我们先把此处键对应的的$value1打印看下吧
思路2结果分析。我们得到了我们想要的值,只是键不是我们想要的。但是键,我们已经在思路1的测试3里面找到了。所以我们可在此处的数组前面再加上我们的键,即可得到我们的结果 $result[$key1][] = $value1;。于是我们就有了test3()函数
public function test()
{
$arr = [
[ 1 => [ 1 , 11 ], ],
[ 1 => [ 11 , 22 ], ],
[ 1 => [ 3 , 33 ], ],
[ 2 => [ 2 , 11 ], ],
[ 2 => [ 2 , 22 ], ],
[ 3 => [ 3 , 33 ], ],
];
$data = $this->test3($arr);
dd($data);
}
public function test3($arr)
{
$result = array();
foreach ($arr as $key => $value)
{
foreach ($value as $key1 => $value1){
$result[$key1][] = $value1;
}
}
return $result;
}
思考,
有时候我们想不通的时候,我们可以先把结果自己写出来,然后从结果上,
往上一层层寻找自己需要的信息。一般都可以写出来自己需要的函数