2013-08-24 3 views
0

Следующий код помещает строку в массив и сортирует по количеству символов в каждом элементе.Групповой массив по количеству символов

$str = 'audi toyota bmw ford mercedes dodge ...'; 

$exp = explode(" ", $str); 

usort($exp, function($a, $b){ 
    if (strlen($a) == strlen($b)) { 
    return 0; 
    } 
    return (strlen($a) < strlen($b)) ? -1 : 1; 
}); 

Как принять этот одномерный массив и сгруппировать элементы по количеству символов с индексом, указывающим количество символов. в группе элементов?

array(
[3] => array(bmw, ...) 
[4] => array(ford, audi, ...) 
[5] => array(dodge, ...) 
) 

Есть ли способ, чтобы взять многомерный массив и распечатать его в формате PHP?

т.е.

$arr = array(
"3" => array("bmw"), 
"4" => array("audi"), 
"5" => array("dodge") 
); 

ответ

2

Это, вероятно, будет проще всего сделать это:

$exp = explode(" ",$str); 
$group = []; // or array() in older versions of PHP 
foreach($exp as $e) $group[strlen($e)][] = $e; 
ksort($exp); // sort by key, ie. length of words 
var_export($exp); 
1
$str = 'audi toyota bmw ford mercedes dodge'; 
$words = explode(" ", $str); // Split string into array by spaces 
$ordered = array(); 
foreach($words as $word) { // Loop through array of words 
    $length = strlen($word); // Use the character count as an array key 
    if ($ordered[$length]) { // If key exists add word to it 
     array_push($ordered[$length], $word); 
    } else { // If key doesn't exist create a new array and add word to it 
     $ordered[$length] = array($word); 
    } 
} 
ksort($ordered); // Sort the array keys 
print_r($ordered); 
Смежные вопросы