Php 使用str_替换为数组会产生意外的结果

Php 使用str_替换为数组会产生意外的结果,php,arrays,if-statement,str-replace,Php,Arrays,If Statement,Str Replace,我有一个存储在数据库中的ID数组,比如1、2、3、4、5、6、7等等 我有一组标签,我正试图应用于这些数字,以供以后使用,但我的输出并没有显示我所期望的。例如,我有: $ids[0] = 7, $ids[1] = 4 我使用此选项应用标签: $ids = str_replace('7', '1Mbps Internet', $ids); $ids = str_replace('4', '2Mbps Internet', $ids); $ids = str_replace('1', '3Mbps

我有一个存储在数据库中的ID数组,比如1、2、3、4、5、6、7等等

我有一组标签,我正试图应用于这些数字,以供以后使用,但我的输出并没有显示我所期望的。例如,我有:

$ids[0] = 7, $ids[1] = 4
我使用此选项应用标签:

$ids = str_replace('7', '1Mbps Internet', $ids);
$ids = str_replace('4', '2Mbps Internet', $ids);
$ids = str_replace('1', '3Mbps Internet', $ids);
$ids = str_replace('8', 'Commercial Internet', $ids);
$ids = str_replace('12', 'Tower Friends', $ids);
$ids = str_replace('6', 'Cable TV', $ids);
$ids = str_replace('11', 'Cable TV Basic', $ids);
$ids = str_replace('5', 'VOIP', $ids);
$ids = str_replace('10', 'Web Services', $ids);
但是,我的输出如下所示:

3Mbps InternetMbps Internet, 2Mbps Internet
1Mbps Internet, 2Mbps Internet
应该是这样的时候:

3Mbps InternetMbps Internet, 2Mbps Internet
1Mbps Internet, 2Mbps Internet

str\u replace()
是一种基本搜索。问题的一部分是希望PHP如何搜索字符串。比如说,

$ids = str_replace('7', '1Mbps Internet', $ids);
$ids = str_replace('4', '2Mbps Internet', $ids);
$ids = str_replace('1', '3Mbps Internet', $ids);
在第三行,您正在搜索字符串“1”。由于您的第一次呼叫将“7”替换为“1Mbps…”,因此第三行也将替换该句中的“1”。我建议迭代数组,或者使用一些正则表达式。一种办法是:

$new_data = array();

foreach( $ids as $id ) {
    switch( $id ) {
        case 1:
            $new_data[] = '3Mbps Internet';
            break;
        case 7:
            $new_data[] = '1Mbps Internet';
            break;
    }
}

//remove duplicates?
$new_data = array_unique($new_data);

部分实现,但希望您能理解这一点。

stru replace
会一个接一个地应用其替换(即使使用数组作为参数调用一次),
strtrtr
(“字符串翻译”)不会

见:

如果给定两个参数,则第二个参数应为
array('from'=>'to',…)
形式的数组。返回值是一个字符串,其中所有出现的数组键都已替换为相应的值。最长的钥匙将首先试用一旦替换了子字符串,将不再搜索其新值。

(新增重点)

因此,您可以做的是:

$ids = strtr($ids, array(
    '7' => '1Mbps Internet',
    '4' => '2Mbps Internet',
    '1' => '3Mbps Internet',
    '8' => 'Commercial Internet',
    '12'=> 'Tower Friends',
    '6' => 'Cable TV',
    '11'=> 'Cable TV Basic',
    '5' => 'VOIP',
    '10', 'Web Services', $ids);
));

您能指定确切的代码和所需的输出吗?然而,我的输出是这样的:--什么的输出?显示它实际输出数据的部分。输出在PHP代码下面的HTML代码中打印$Packages的值。输出是if/elseOk中设置的$Packages变量,谢谢。我明白为什么我现在得到了意想不到的结果,完全错过了这一部分。我会研究一下你的建议。非常感谢。