2015-02-11 2 views
-3

У меня есть массив строкPHP - сортировать массив по шаблону

[ "one", "Two", "FOUR", "Four", "three", "two"] 

Мне нужно создать строку, которая выглядит следующим образом:

«один, три, два

один, два , три, четыре, два

один, два, четыре, три, четыре, два ".

Буду признателен за любую помощь. Благодарю.

+1

Так что вы можете на самом деле объяснить логику этих моделей? –

+0

И шаблон? В твоих мыслях? –

+0

Я, честно говоря, не вижу логики в вашем желаемом выходе. Обычно для выполнения общей функции должна быть какая-то логика. В противном случае вам понадобится очень специфическая функция для обработки крайних случаев. – AnotherGuy

ответ

0

Требуется PHP> = 5.4 для синтаксиса короткого массива

$master = [ "one", "Two", "FOUR", "Four", "three", "two"]; 

// Filter $master into arrays containing the appropriate lower, ucfirst and upper values 
$lowerSet = array_filter(
    $master, 
    function($value) { 
     return strtolower($value) == $value; 
    } 
); 

$ucfirstSet = array_filter(
    $master, 
    function($value) { 
     return ucfirst(strtolower($value)) == $value; 
    } 
); 

$upperSet = array_filter(
    $master, 
    function($value) { 
     return strtoupper($value) == $value; 
    } 
); 

function sorting(array $series) { 
    $mi = new MultipleIterator(MultipleIterator::MIT_NEED_ANY); 
    foreach($series as $valueSet) { 
     $mi->attachIterator(new ArrayIterator($valueSet)); 
    } 
    $line = []; 
    foreach($mi as $values) { 
     $line = array_merge($line, $values); 
    } 
    return array_filter($line); 
} 

$lines = [ 
    implode(', ', $lowerSet), 
    implode(', ', sorting([$lowerSet, $ucfirstSet])), 
    implode(', ', sorting([$lowerSet, $ucfirstSet, $upperSet])) 
]; 
echo implode(PHP_EOL, $lines); 

но будет работать с PHP> = 5,3, если [] заменяется array()

+0

Это то, что я искал. Большое спасибо, Марк. –

Смежные вопросы