【发布时间】:2014-11-23 03:32:14
【问题描述】:
我有这段 PHP 代码,它从传入的字符串中去除了 - 破折号。数组键在每个单词之间可能有也可能没有-。所以如果字符串有空格或破折号,字符串仍然匹配到键。
现在我需要稍微扩展一下,让部分匹配找到数组中的键。
这是我目前所拥有的。
我的数组
$pages = array(
'Administrator' => array(
'network-administrator' => array('title' => 'Network '.$li_1, 'description' => 'Network '.$li_1.' '.$temp_content, 'post' => '<p>Network '.$li_1.' '.$temp_content.'.</p>'),
'database administrator' => array('title' => 'Database '.$li_1, 'description' => 'Database '.$li_1.' '.$temp_content, 'post' => '<p>Database '.$li_1.' '.$temp_content.'.</p>'),
),
'Analyst' => array(
'business systems analyst' => array('title' => 'Business Systems '.$li_2, 'description' => 'Business Systems '.$li_2.' '.$temp_content, 'post' => '<p>Business Systems '.$li_2.' '.$temp_content.'.</p>'),
'data-analyst' => array('title' => 'Data '.$li_2, 'description' => 'Data '.$li_2.' '.$temp_content, 'post' => '<p>Data '.$li_2.' '.$temp_content.'.</p>'),
),
);
PHP foreach 循环
$t_keys = array();
foreach ($pages as $k => $arr2) {
foreach (array_keys($arr2) as $a) {
$new_key = str_replace("-", " ", $a);
$t_keys[$new_key] = array( $k, $a );
}
}
$str = str_replace(array('-', ' and '), ' ', strtolower($position));
if (array_key_exists($str, $t_keys)) {
$target = $pages[ $t_keys[$str][0] ][ $t_keys[$str][1] ];
}
$t_keys[$str][0] 访问密钥 Administrator,$t_keys[$str][1] 访问子密钥 network-administrator。
我需要做的是匹配来自 URL 中查询字符串的传入字符串,以在数组的子键中找到匹配项。
传入的示例部分匹配字符串为oracle database administrator。该键不在我的数组中,但 oracle administrator 和 database administrator 是。
如果存在相似的单词,我如何匹配进入数组中子键的字符串?
这是我的错误日志中传入的部分匹配字符串的小列表。
it
apple
css
.net developer
desktop
.net
python
apple
data center
phone technician
sql database developer
jquery
delphi
css
python
pc
software
xml
webmaster
research development
python programming
computer technician or pc technician
.net
c
在某些情况下,上述部分匹配项在数组中的任何位置都不存在。我只是对这些进行重定向。但其他如data center 和python programming 仅作为示例在数组中。
字符串data center 的示例,数组中最接近的匹配项是data center technician,字符串python programming 的最接近匹配项是python developer。
感谢所有帮助!
编辑
为了清楚起见,这里有一些关于部分匹配的更多信息,这将是一个问题。
是的,我知道有些匹配会比其他匹配更棘手。在我的数组中,没有名为 programming 的密钥,但有一个名为 developer 的密钥,因此字符串 python programming 可以放置到子密钥 python developer 中,因为这是开发人员密钥的子密钥。
其他的比如字符串data center会比较棘手,因为主键的几个子键都有data center这个词。
我们以字符串computer technician or pc technician 为例。这不再是我数组中的子键。但是有称为computer technician 和pc technician 的子键。如果两个子键都存在于字符串中,哪一个部分匹配?
如果我现在可以获得一些基本的东西,至少可以处理其中一些部分匹配,那么我就在正确的轨道上。
编辑 2
这是字符串business analyst 的另一个示例。我的数组中有一个名为business systems analyst 的子键。单词business 和analyst 都是子键中的单词。所以我需要创建一些东西,每次有新字符串进入数组时,我可以继续添加它。
编辑 3
思考了几分钟后,我认为最好的方法是手动将进入数组的每个部分字符串添加到我选择的子键中。
这有意义吗?
所以我需要创建一个 php sn-p,我不断将其添加到指向数组中键的部分匹配字符串的数组容器中。我该怎么做?
【问题讨论】:
-
python 编程/python 开发者的“匹配”有点棘手——你有没有想过实现这种匹配的方法?
-
是的,我知道有些匹配会比其他匹配更棘手。在我上面的问题中发布编辑以更清楚地解释这一点。
-
我认为最好的方法是手动将进入数组的每个部分字符串添加到我选择的子键中。那有意义吗?因此,我不断将 php sn-p 添加到指向数组中键的部分匹配字符串的数组容器中。我该怎么做?
-
您是否考虑过使用数据库而不是 PHP 数组?这很快就会变得笨拙。
-
我的数组没有那么大。我选择数组是因为我可以轻松管理、更改和提取信息。我不必担心服务器与数据库的连接以及拥有数据库带来的其他问题。如果它在路上变得更大,我可能会使用数据库。如何安全地连接到数据库?如果您有一个很好的参考链接供我查看,我将不胜感激。
标签: php arrays regex string multidimensional-array