将foreach结果拆分为可重用变量

时间:2016-07-21 18:18:45

标签: php foreach split var

我有一个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>";
}

我怎样才能做到这一点?

1 个答案:

答案 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]等)。