我有一堆变量,我想把它们串起来。 它们都需要通过删除空格和逗号,并转换为破折号来进行整理(我正在构建一个URL)。
我对PHP有一个非常基本的了解,但是我觉得我下面的代码可以更整洁,更高效。 你能给我指一些资源或者提一些建议吗?
以下是我所得到的:
$propNum = $prop->Address->Number;
$propStreet = $prop->Address->Street;
$propTown = $prop->Address->Town;
$propPost = $prop->Address->Postcode;
$propFullAdd = array($propNum, $propStreet, $propTown, $propPost);
$propFullAddImp = implode(" ",$propFullAdd);
$propFullAddTidy = str_replace(str_split(' ,'),'-', strtolower($propFullAddImp));
echo $propFullAddTidy;
从现有代码的输出来看,您可能需要类似以下内容的输出:
12345-example-street-address-example-town-example-postcode
在这种情况下,您可以使用以下解决方案:
//loop through all the values of $prop->Address
foreach($prop->Address as $value) {
//for each value, replace command + space with dash
//store altered value in new array `$final_prop`
$final_prop[] = str_replace([' ', ','], '-', $value);
/*
Removing `str_split(' ,')` and subbing an array makes the loop "cheaper" to do,
Because the loop doesn't have to call the `str_split()` function on every iteration.
*/
}
//implode `$final_prop` array to dash separated string
//also lowercase entire string at once (cheaper than doing it in the loop)
$final_prop = strtolower(implode('-', $final_prop));
echo $final_prop;
如果删除注释,这个解决方案只有4行(而不是7行),并且是完全动态的。 这意味着如果向$prop->address
添加更多值,则不必更改此代码中的任何内容。
我觉得这通常是通过使用http_build_query()
来处理的,它将数组转换为正确的URL编码的查询字符串。 这意味着数组中的每个值都将在URL查询中作为自己的变量传递。
首先,$propFullAdd
不是必需的(事实上,它可能是有害的),$prop->address
已经包含了完全相同的数组。 像这样重新创建数组完全消除了区分哪个值到哪个键的能力,这可能会有问题。
这意味着您可以通过以下方式来简化整个代码:
echo http_build_query($prop->Address);
输出如下所示:
Number=12345&Street=Example+Street+Address&Town=Example+Town&Postcode=Example+Postcode