在PHP中使用多个数组的foreach循环

3

我已经试了几个小时使用foreach循环遍历2个数组,以下是我的代码:

function displayTXTList($fileName) {

    if (file_exists($fileName)) {
        $contents = file($fileName);
        $string   = implode($contents);
        preg_match_all('#\[\[(\w+)\]\]#u', $string, $name);
        preg_match_all('/style=(\'|\")([ -0-9a-zA-Z:]*[ 0-9a-zA-Z;]*)*(\'|\")/', $string, $name2);
        $i = 0;
        foreach ($name[1] as $index => $value) {
            echo '<br/>' . $value, $name2[$index];
        }
    }
}

displayTXTList('smiley2.txt');

以下是我得到的内容:

这是我得到的:

sadArray
cryingArray
sunArray
cloudArray
raining
coffee
cute_happy
snowman
sparkle
heart
lightning
sorry
so_sorry
etc...

但是我想要这个:
sadstyle='background-position: -0px -0px;'
cryingstyle='background-position: -16px -0px;'
sunstyle='background-position: -32px -0px;'
etc...

实际的文本文件是这样的:
[[sad]]<span class='smiley' style='background-position: -0px -0px;'></span>
[[crying]]<span class='smiley' style='background-position: -16px -0px;'></span>
[[sun]]<span class='smiley' style='background-position: -32px -0px;'></span>
[[cloud]]<span class='smiley' style='background-position: -48px -0px;'></span>
[[raining]]<span class='smiley' style='background-position: -64px -0px;'></span>
etc...

我该如何做到这一点?我是新来的,所以请不要打分:/


1
请缩进您的 PHP 代码 - Netorica
1
“缩进”是什么意思? - Duncan
使用“print_r($name2,true)”查找数组嵌套。您只需要再抽象一层即可访问您的值。 - ethrbunny
@MarioErmando:我编辑了你的问题,这就是Mahan所说的缩进代码(或类似的方式)。这样可以使代码更易读。 - hakre
@ethrbunny 当我将它设置为“false”时,它不显示任何内容。 - Duncan
1个回答

2
你正在将一个数组输出为字符串(因此在输出中有 Array,如果你将一个数组转换为字符串(例如使用 echo),PHP 将把它转换为 "Array")。相反地,应该访问数组中的匹配项(我假设 $name2 的组为 0,请确认):
echo '<br/>' .$value , $name2[0][$index];
                             ^^^--- was missing

function displayTXTList($fileName) {

    if (!file_exists($fileName)) {
        return;
    }

    $string = file_get_contents($fileName);

    $names  = preg_match_all('#\[\[(\w+)\]\]#u', $string, $matches) ? $matches[1] : array();
    $styles = preg_match_all(
        '/style=(\'|\")([ -0-9a-zA-Z:]*[ 0-9a-zA-Z;]*)*(\'|\")/', $string, $matches
    ) ? $matches[0] : array();

    foreach ($names as $index => $name) {
        $style = $styles[$index];
        echo '<br/>', $name, $style;
    }
}

displayTXTList('smiley2.txt');

@MarioErmando:不用谢。我更新了答案,展示了函数的编写方式,你可以通过使用一些不同的函数、更改变量的措辞、提前退出等来进行改进。慢慢阅读并思考一下,不是说应该像那样编写,只是给出一些指针。 - hakre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接