我有一个foreach函数:
foreach ($result as $result) {
echo "<a href='" . $result . "'>" . $result . "</a><br>";
}
生成如下列表:
[spacer]_[timespacer]_fiveseconds.wav
[trudy]_[0x06DDD12A]_i.wav
[trudy]_[0x06DDD12A]_get.wav
[spacer]_[timespacer]_halfsecond.wav
[spacer]_[timespacer]_onesecond.wav
我试过explode
&amp; split
函数,但这会不断返回一个完整的列表:
array
array
我想要实现的是让foreach $result
变量在第一组[]
和另一个包含第二组[]
的变量之间保存单词/名称第三个变量,用于保存最后_
和.wav
之间的所有内容。所以它将有这些变量:
$result_classname = spacer
$result_parent = timespacer
$result_name = fiveseconds
$result = [spacer]_[timespacer]_fiveseconds.wav
这将允许我这样做:
foreach ($result as $result) {
echo "<a class='" . $result_classname . "' href='" . $result . "'>" . $result_name . "</a><span>" . $result_parent . "</span><br>";
}
我怎样才能做到这一点?
答案 0 :(得分:2)
首先,您不希望在foreach
中使用相同的变量:
foreach ($result as $result) {
使用其他变量:
foreach ($result as $value) {
然后,这是处理此问题的非正则方法:
list($classname, $parent, $name) = explode('_', $value);
$classname = trim($classname, '[]');
$parent = trim($parent, '[]');
$name = pathinfo($name, PATHINFO_FILENAME);
[]
个字符或简单的正则表达式:
preg_match('/\[([^\]]+)\]_\[([^\]]+)\]_([^.]+).*/', $value, $matches);
然后使用print_r($matches);
查看要使用的内容($matches[0]
等)。