0

我有需要按外观排序的数组,因为它们是按照我的意愿手动编写的。请注意,这些值是预期会出现的提示:

  $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应用任何排序 我怀疑这些 $items 是由我无法重新排序的表单在某处订购的. 我只是有能力从上到下写出我想要的输出和顺序。但是我不能在 $items 中插入键,只是因为我需要自由地重新排序。

我看了一下输出,键没有按预期排序。

非常感谢任何提示。谢谢

4

2 回答 2

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;

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

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

于 2012-04-24T13:12:38.520 回答
0

php 源代码在我们看来的方式与编译器不同。所以不可能那样做。但是,如果您在源代码上运行正则表达式,则有可能(不是很好)。

例子:

$source = file_get_contents(__FILE__);
preg_match_all('#\$items\[\]\s*=\s*"([^"]+)"#', $source, $match);
// now $match[1] contains the strings.
$strings = $match[1];
于 2012-04-24T13:09:57.587 回答