改变php文件中数组元素的顺序

时间:2012-11-20 21:32:21

标签: php text

不确定如何标题这篇文章。

我刚刚继承了一组国际化文档,每个文档都包含一组键值对。我认识到这种方法并不理想,但是,鉴于我的角色,我所拥有的时间和资源,我坚持不懈。这些清单是手工制作的,随意添加物品以满足需求。以下示例是简化的,有大约21个语言文件,每个文件有100多个条目。

一个文件中的数组将包含如下所示的元素:

'download_high' => 'Vysoké',
'download_low' => 'Nízké',
'download_med' => 'Strední',
'download_video' => 'Stáhnout video',

虽然另一个文件会包含以下内容:

'download_video' => 'Descargar Video',
'download_high' => 'Alta',
'download_med' => 'Media',
'download_low' => 'Baja',

在大多数情况下,元素是按顺序排序的,但是有很多例外,它使维护文件变得复杂。我想知道是否有办法通过IDE或记事本++插件等使这些数组的顺序/格式保持一致。我不想按字母顺序对它们进行排序,因为逻辑分组不能很好地转换为字母顺序排序,因为只有一些变量是命名空间。手动操作几乎是不可能的,但如果有某种方法来指定一个订单并使用某种文本操作工具批处理文件,那将会很好。我不熟悉php,所以我不知道通过代码执行此操作是值得的,除非它非常简单。

5 个答案:

答案 0 :(得分:2)

PHP有一个名为var_export的函数。您可以运行代码,然后使用该函数打印它。

就个人而言,我会在notepad ++中运行一些正则表达式来完成它。

编辑:在记事本++中,您可以使用正则表达式进行查找/替换。

在“查找内容”字段中,添加\s*'(.+?)'\s*=>\s*'(.+?)'\s*(?:(,)|\s*$)\s*

在“替换为”字段中,添加'$1' => '$2'$3\n

这会变成:

'download_high'         =>  'Vysoké',
    'download_low'=>                    

    'Nízké',
'download_med'
=>
'Strední'
,
    'download_video'    =>  'Stáhnout video',
'filter_by' => 'Filtrovat podle'
,




'footer_contact' => 'Kontakt'

'download_high' => 'Vysoké',
'download_low' => 'Nízké',
'download_med' => 'Strední',
'download_video' => 'Stáhnout video',
'filter_by' => 'Filtrovat podle',
'footer_contact' => 'Kontakt'

*注意:这是在假设所有键和值都使用单引号并且键和值都没有任何转义单引号的情况下编写的。

答案 1 :(得分:1)

鉴于这种情况,我会根据需要半自动完成。也就是说,听起来像是你负责维护这些文件,并且维护中的排序成为一个问题。

对于格式化为:

的每种语言文件
<?php
$something = array(
  'download_video' => 'Descargar Video',
  'download_high' => 'Alta',
  ...
  'download_med' => 'Media',
  'download_low' => 'Baja',
);
  1. 在bash中发出sort lang.es.php命令,或者通过你喜欢的方式排序。
  2. 打开文件进行编辑。
  3. 删除数组声明。
  4. 复制/粘贴#1的排序行。
  5. 老实说,你的前任有效地硬编码这样的东西是一个非常糟糕的主意。如果通过CSV,XML,pg / mySQL等存储它们会更好,你至少可以调用一个理解数据格式的编辑器。

答案 2 :(得分:0)

如果你有一个不断增长的列表,我不会建议使用数组和php文件等。现在花几分钟时间设置mysql并从数据库中提取所需的参数。 NEAT,FAST,EFFECIENT AND SCALABLE。

答案 3 :(得分:0)

我的建议是简单地构建一个脚本,将所有这些数组加载到数据库中,以便更容易地维护它们。当然,您需要确保为UTF-8字符集和排序规则设置了数据库表/字段。

答案 4 :(得分:0)

我是否理解您已将数据导入PHP数组?此时你可以这样做来对键进行排序。这将使订购保持一致:

ksort($array);