将 foreach 结果拆分为可重用的变量
Split foreach results into reusable variables
我有一个 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
和 split
函数,但是这个函数总是 returns 整个列表:
array
array
我想要实现的是 foreach $result
一个变量,它在第一组 []
和另一个变量之间保存 word/name 第二组 []
然后是第三个变量,它包含最后一个 _
和 .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>";
}
我怎样才能做到这一点?
首先,您不想在 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);
- 下划线爆炸
- trim
[]
从每一端开始的字符
- 获取不带扩展名的文件名
或者一个简单的正则表达式:
preg_match('/\[([^\]]+)\]_\[([^\]]+)\]_([^.]+).*/', $value, $matches);
然后用print_r($matches);
看看用哪个($matches[0]
等)。
我有一个 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
和 split
函数,但是这个函数总是 returns 整个列表:
array
array
我想要实现的是 foreach $result
一个变量,它在第一组 []
和另一个变量之间保存 word/name 第二组 []
然后是第三个变量,它包含最后一个 _
和 .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>";
}
我怎样才能做到这一点?
首先,您不想在 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);
- 下划线爆炸
- trim
[]
从每一端开始的字符 - 获取不带扩展名的文件名
或者一个简单的正则表达式:
preg_match('/\[([^\]]+)\]_\[([^\]]+)\]_([^.]+).*/', $value, $matches);
然后用print_r($matches);
看看用哪个($matches[0]
等)。