PHP-获取foreach循环中关联数组的每个值,然后应用函数并回显结果

时间:2014-06-09 18:34:05

标签: php

我有一段类似于下面的代码:

    $list_links = array(
        [0] => Array // Here I get this error message Parse error: syntax error, unexpected '[', expecting ')'
            (
                "http://test.com/1/",
                "http://test.com/2/"
            ),
        [1] => Array
            (
                "http://test.com/3/",
                "http://test.com/4/"
            )
            );
    //Code stops to execute here        
    foreach($list_links as $link) {
        DoWork($link, $db_connect);
        if ($list_links[0]) {
            echo "this URL is from the 0 list";
        } else if ($list_links[1]) {
            echo "this URL is from the 1 list";
        }
    }
    //DoWork function works well and is already tested 
        function DoWork($link, $db_connect){
        ...
        ...
        ...
    }

问题是代码在到达DoWork()循环时停止执行foreach()函数,因为它无法从列表中获取每个URL。 以下是我的问题: 你能看看foreach($list_links as $link)语法是否正确吗? 2. ifif ($list_links[0])的{​​{1}}格式是否正确以回复消息?

3 个答案:

答案 0 :(得分:2)

我不建议在这样的循环中进行数据库调用,但要回答你的问题:

variable分配给功能结果

$list_links = DoWork($link, $db_connect);
if ($list_links[0]) {
    echo "this URL is from the 0 list";
 } else if ($list_links[2]) {
    echo "this URL is from the 1 list";
 }

语法错误

$list_links = array(
        [0] => Array
            (
                "http://test.com/1/",
                "http://test.com/2/", <---- remove this ,
            ),
        [1] => Array
            (
                "http://test.com/3/",
                "http://test.com/4/",  <---- remove this ,
            )
            );

答案 1 :(得分:2)

在此上下文中,foreach($list_links as $link)$link不是网址,而是网址数组。尝试使用嵌套的foreach:

foreach ($list_link as $link_array) {
    foreach ($link_array as $link) {
        DoWork($link, $db_connect);
    }
}

这将解决问题的第一部分。但是,我不确定您使用if($list_links[0]) ...尝试完成的操作。这只会检查$list_links[0]是真还是假。此外,无论您尝试做什么,它都不会像错误检查一样,因为,根据您的数据,每个网址将始终分开$list_link[0]或{{ 1}}。如果您只想说明每个URL来自哪个列表,请尝试以下操作:

$list_link[1]

关于foreach ($list_link as $key=>$link_array) { foreach ($link_array as $link) { DoWork($link, $db_connect); echo 'this url is from the '.$key.' list'; } }

从键中删除括号。声明数组时,不使用它们。

Parse error: syntax error, unexpected '[', expecting ')'

请注意,如果数组元素的键是字符串,则必须将其包装在引号中:

$list_links = array(
    0 => array
        (
            "http://test.com/1/",
            "http://test.com/2/"
        ),
    1 => array
        (
            "http://test.com/3/",
            "http://test.com/4/"
        )
);

进一步注意,数组的默认键是从0开始的整数,因此在您的情况下,您可以简单地删除键以获得相同的结果:

$array = array ('key' => 'value')

这将自动为这两个元素分配键0和1,而无需显式声明。 See a demo

答案 2 :(得分:2)

只是猜测并试图成为有帮助的人。不要投票给我。 这可能吗?

foreach($list_links as $link) {
    DoWork($link, $db_connect);
    if (in_array($links, $link_list[0])) {
        echo "this URL is from the 0 list";
    } elseif (in_array($links, $link_list[1])) {
        echo "this URL is from the 1 list";
    }
}

请注意,我使用in_array()的递归功能来检查$ links数组是否包含'zero'数组$link_list[0]或'one'数组$link_list[1]中的值。< / p>

PHP Manual: in_array()