我有一个存储在数据库中的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
$Package1 = $ids[0];
$Package2 = $ids[1];
$Package3 = $ids[2];
$Package4 = $ids[3];
if (!$Package1) {$P_word = "$Package:"; $Packages = "None Subscribed";}
else if ($Package1 && !$Package2) {$P_Word = "Package:"; $Packages = "$Package1";}
else if ($Package1 && $Package2 && !$Package3) {$P_Word = "Packages:"; $Packages = "$Package1, $Package2";}
else if ($Package1 && $Package2 && $Package3 && !$Package4) {$P_Word = "Packages:"; $Packages = "$Package1, $Package2, $Package3"; }
else {$P_Word = "Packages:"; $Packages = "$Package1, $Package2, $Package3, $Package4"; }
答案 0 :(得分:3)
str_replace()
是基本搜索。您的部分问题是您希望PHP如何搜索您的字符串。例如,
$ids = str_replace('7', '1Mbps Internet', $ids);
$ids = str_replace('4', '2Mbps Internet', $ids);
$ids = str_replace('1', '3Mbps Internet', $ids);
在第3行,您正在搜索字符串" 1"。由于您的第一次通话被替换为" 7"使用" 1Mbps ...",第3行将取代" 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);
部分实施,但希望你明白这一点。
答案 1 :(得分:0)
虽然str_replace
一个接一个地应用其替换(即使使用数组作为参数调用一次),strtr
("字符串翻译")也不会。
请参阅manual:
如果给出两个参数,则第二个应该是
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);
));