【问题标题】:PHP - sort array by patternPHP - 按模式排序数组
【发布时间】:2015-02-11 10:51:25
【问题描述】:

我有一个字符串数组

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

我需要创建一个如下所示的字符串:

“一,三,二

一、二、三、四、二

一、二、四、三、四、二"。

如果有任何帮助,我将不胜感激。谢谢。

【问题讨论】:

  • 那么你能解释一下这些模式背后的逻辑吗?
  • 模式是什么?在你的脑海里?
  • 老实说,我看不到您想要的输出中的逻辑。通常必须有某种逻辑才能实现通用功能。否则,您将需要一个非常具体的函数来处理极端情况。
  • 第一行只有小写字符串。在第二行,一个小写字母,一个首字母大写字母,依此类推。第三行,一个小写,下一个是第一个字母大写,然后是大写,依此类推,直到数组中有元素。
  • 好的,你试过什么?

标签: php arrays sorting


【解决方案1】:

短数组语法需要 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);

但如果将[] 替换为array(),则可以使用 PHP >= 5.3

【讨论】:

  • 这就是我想要的。非常感谢马克。
猜你喜欢
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多