是否存在按函数分组的PHP数组?
在数组中,我有三个不同的索引长度a、b和c的长度都是1。aa、bb、cc和dd的长度均为2。aaa、bbb和ccc的长度均为3 我要做的是找到元素最多、长度最大的索引(按长度分组) 所以我会使用aa,bb,cc,dd,因为它们有4个元素,这将返回索引长度2 我想知道我怎样才能拿到2 这就是我正在尝试的,但它不起作用是否存在按函数分组的PHP数组?,php,arrays,group-by,Php,Arrays,Group By,在数组中,我有三个不同的索引长度a、b和c的长度都是1。aa、bb、cc和dd的长度均为2。aaa、bbb和ccc的长度均为3 我要做的是找到元素最多、长度最大的索引(按长度分组) 所以我会使用aa,bb,cc,dd,因为它们有4个元素,这将返回索引长度2 我想知道我怎样才能拿到2 这就是我正在尝试的,但它不起作用 $arr1 = array('a' => '1', 'b' => 'blah', 'c' => 'whatever...', 'aa'
$arr1 = array('a' => '1', 'b' => 'blah', 'c' => 'whatever...',
'aa' => '2', 'bb' => 'lbha', 'cc' => 'everwhat...', 'dd' => 'bingo',
'aaa' => '3', 'bbb' => 'halb', 'ccc' => 'revetahw...');
结果:
foreach($arr1 as $key => $data) {
$index_length_arr[strlen($key)] = $index_length_arr[$key] + 1;
}
预期产出:
Array
(
[1] => 1
[2] => 1
[3] => 1
)
然后我可以看到索引(长度为2)包含的元素最多:
Array
(
[1] => 3
[2] => 4
[3] => 3
)
应该给你你想要的
编辑:
您的原始代码很好,只是您必须更改=。。。。至$index\u length\u arr[strlen($key)]
你用了两把不同的钥匙
$array = array_count_values(array_map('strlen',array_keys($arr1)));
获取您的预期结果。我建议您创建自己的库(或使用已经创建的库)。应该是这样的(没有测试): 像这样使用它:
function groupBy($array, $function)
{
$dictionary = [];
if ($array) {
foreach ($array as $item) {
$dictionary[$function($item)][] = $item;
}
}
return $dictionary;
}
我强烈推荐使用lstrojny的函数式php,它包括一个
group()
,以及许多其他有用的函数式编程概念 你能发布预期的输出吗?还是我误解了你的帖子?我用一个实际的解决方案更新了我的答案,因为“不”的一句回答可能非常令人沮丧。Derelease的回答很好,但这太简单了,谢谢
$arr1 = array('a' => '1', 'b' => 'blah', 'c' => 'whatever...',
'aa' => '2', 'bb' => 'lbha', 'cc' => 'everwhat...', 'dd' => 'bingo',
'aaa' => '3', 'bbb' => 'halb', 'ccc' => 'revetahw...');
$tmpArray = array();
foreach ($arr1 AS $key => $val) {
if (empty($tmpArray)) {
$tmpArray[strlen($key)] = 0;
}
$tmpArray[strlen($key)]++;
}
print_r($tmpArray);
function groupBy($array, $function)
{
$dictionary = [];
if ($array) {
foreach ($array as $item) {
$dictionary[$function($item)][] = $item;
}
}
return $dictionary;
}
$usersByAge = groupBy($users, function ($age) { return $user->age; } );