【问题标题】:Split foreach results into reusable variables将 foreach 结果拆分为可重用的变量
【发布时间】:2016-11-25 11:35:00
【问题描述】:

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

我尝试了 explodesplit 函数,但这会不断返回一个完整的列表:

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>";
}

我怎样才能做到这一点?

【问题讨论】:

    标签: php foreach split var


    【解决方案1】:

    首先,您不想在 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]等)。

    【讨论】:

    • 嘿,我刚试过你的代码!它正在部分工作。我确信是我做错了什么。我将您的代码添加到foreachecho 上方,它现在可以正确显示名称,但不能正确显示父级和类名。我将像现在一样在主要文章中上传代码。所以它可以比我的胡言乱语更好理解;-)
    • 我犯了一个愚蠢的错误。检查新的trim() 行。
    • 我参加了完美的预赛。也尝试了其他方法,但链接给了我array 而不是链接。我要感谢您重做最初的答案,并且显然帮助我解决了这个问题。非常感谢!
    • 也将尝试使用那些新的trim() 行。
    • 另外,请确保在 foreach 和之后的所有行中使用 $value
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    相关资源
    最近更新 更多