Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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_Group By - Fatal编程技术网

是否存在按函数分组的PHP数组?

是否存在按函数分组的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'

在数组中,我有三个不同的索引长度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' => '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; } );