2010-11-03 42 views
3
$arr1 = array('a' => '1', 'b' => 'blah', 'c' => 'whatever...', 
       'aa' => '2', 'bb' => 'lbha', 'cc' => 'everwhat...', 'dd' => 'bingo', 
       'aaa' => '3', 'bbb' => 'halb', 'ccc' => 'revetahw...'); 

在數組中,我有三個不同的索引長度a,b和c都是1的長度。 aa,bb,cc和dd都是2的長度。 aaa,bbb和ccc的長度都是3。是否有一個PHP Array組按功能?

我想要做的是找到索引(分組長度)與最多的元素和最大的長度。

,所以我會用AA,BB,CC,DD,因爲他們有4個元素,這將返回2.

指數長度我想知道我怎麼能拿到2?

這裏是我嘗試,但它不工作

foreach($arr1 as $key => $data) { 
    $index_length_arr[strlen($key)] = $index_length_arr[$key] + 1; 
} 

結果:

Array 
(
    [1] => 1 
    [2] => 1 
    [3] => 1 
) 

預期輸出:

Array 
(
    [1] => 3 
    [2] => 4 
    [3] => 3 
) 

然後,我可以看到指數(與長度爲2)的元素最多:

'aa' => '2', 'bb' => 'lbha', 'cc' => 'everwhat...', 'dd' => 'bingo', 
+0

你可以請發佈預期的產出?或者我誤解了你的帖子? – ircmaxell 2010-11-03 19:26:03

+0

我用一個實際的解決方案更新了我的答案,因爲「否」的單個句子響應可能相當令人沮喪。 – Dereleased 2010-11-03 19:40:20

回答

7
$array = array_count_values(array_map('strlen',array_keys($arr1))); 

應該給雅你想要什麼。

編輯:

你原來的代碼是罰款,除非你不得不改變= ....到$index_length_arr[strlen($key)]

你使用兩種不同的密鑰。

+0

+1,比我的回答更優雅。 – Dereleased 2010-11-03 19:50:08

+0

dereleased有一個很好的答案,但這是簡單的,謝謝 – 2010-11-03 20:02:13

0
$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); 

獲取您的預期結果。

3

我建議創建自己的(或使用已經做到的庫)。它會是這樣(沒有測試):

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; });