PHP按外观排序数组

时间:2012-04-24 13:04:09

标签: php

我有阵列需要按照它们的外观排序,因为它们是我的自由意志手动编写的。请注意,值是预期显示的提示:

  $options = array("the array retrieved from some forms");
  $items   = array();
  foreach ($options as $key => $val) {
    switch ($key) {
      case 'three':
        $items[]          = "this should come first";
        $items[]          = "now the second in order";
        $items[]          = "the third";
        $items[]          = "forth";

        switch ($val) {
          case 'a':
          case 'b':
            $items[]       = "fifth";
            $items[]       = "should be six in order";
            break;

          case 'c':
          default:
            $items[]    = "7 in order";
            break;
        }

        break;

...............

正如您所看到的,值可以是任何值,但我需要的是根据它们的外观内爆和显示项目。它的所有手动订单,首先应该打印在顶部。

预期:

"this should come first";
"now the second in order";
"the third";
"forth";
"fifth";
"should be six in order";
"7 in order";

当前意外:

"should be six in order";
"forth";
"7 in order";
"the third";
"fifth";
"this should come first";
"now the second in order";

但我似乎无法应用此http://www.php.net/manual/en/array.sorting.php中的任何排序 我怀疑那些$ item是按照我无法重新排序的表格在某处订购的。我只是有能力从上到下编写输出和顺​​序。但我无法将密钥插入$ items,因为我需要自由重新排序。

我查看了输出,键未按预期排序。

非常感谢任何提示。感谢

2 个答案:

答案 0 :(得分:2)

似乎完成数组的步骤不符合您的要求。

也许你可以用一些技巧来实现你想要的东西

例如插入“键指针”

$ikey = 0;
$options = array("the array retrieved from some forms");
  $items   = array();
  foreach ($options as $key => $val) {
    switch ($key) {
      case 'three':
        $items[$ikey++]          = "this should come first";
        $items[$ikey++]          = "now the second in order";
        $items[$ikey++]          = "the third";
        $items[$ikey++]          = "forth";

        switch ($val) {
          case 'a':
          case 'b':
            $items[$ikey++]       = "fifth";
            $items[$ikey++]       = "should be six in order";
            break;

          case 'c':
          default:
            $items[$ikey++]    = "7 in order";
            break;
        }

        break;

我不确定这是否有帮助,因为您发布了不完整的代码。

  

对不起我的英语,如果有任何错误

答案 1 :(得分:0)

php源出现给我们的方式与编译器不同。所以这不可能。但是,如果你在源代码上运行正则表达式,那么它可能(不是很好)。

示例:

$source = file_get_contents(__FILE__);
preg_match_all('#\$items\[\]\s*=\s*"([^"]+)"#', $source, $match);
// now $match[1] contains the strings.
$strings = $match[1];