PHP - 数组和Foreach

时间:2013-04-11 17:23:21

标签: php arrays foreach

我在Google上搜索并查阅了PHP文档,但无法弄清楚以下代码的工作原理:

$some='name=Licensing Module;nextduedate=2013-04-10;status=Active|name=Test Addon;nextduedate=2013-04-11;status=Active';
function getActiveAddons($somet) {
    $addons = array( );
    foreach ($somet as $addon) {

        if ($addon['status'] == 'Active') {
            $addons[] = $addon['name'];
            continue;
        }
    }

    return $addons;
}
echo (count( getActiveAddons( $some ) ) ? implode( '<br />', getActiveAddons( $some ) ) : 'None');

代码总是回显None

请帮助我。

3 个答案:

答案 0 :(得分:0)

我不知道你从哪里得到这段代码但是你错误地初始化了$some。它应该像这样的数组:

$some = array(
    array(
     'name' => 'Licensing Module',
     'nextduedate' => '2013-04-10',
     'status' => 'Active'
    ),
    array(
     'name' => 'Test Addon'
     'nextduedate' => '2013-04-11',
     'status' => 'Active'
    )
 );

我猜你读过的文章希望你将原始字符串解析成这种格式。

你可以这样做:

$string = 'name=Licensing Module;nextduedate=2013-04-10;status=Active|name=Test Addon;nextduedate=2013-04-11;status=Active';

$result = array();
foreach(explode('|', $string) as $record) {
    $item = array();
    foreach(explode(';', $record) as $column) {
        $keyval = explode('=', $column);
        $item[$keyval[0]] = $keyval[1];
    }
    $result[]= $item;
}

// now call your function
getActiveAddons($result);

答案 1 :(得分:0)

$ some不是一个数组,所以foreach不会对它进行操作。你需要做一些像

这样的事情
$some = array(
   array(
      'name' => 'Licensing Module',
      'nextduedate' => '2013-04-10',
      'status' => 'Active'
   ),
   array(
      'name' => 'Test Addon',
      'nextduedate' => '2013-04-11',
      'status'=> 'Active'
   )
);

这将创建一个可以循环的多维数组。

function getActiveAddons($somet) {
    $addons = array( );
    foreach ($somet as $addon) {
        foreach($addon as $key => $value) {
            if ($key == 'status' && $value == 'Active') {
                $addons[] = $addon['name'];
                continue;
            }
        }
    }
    return $addons;
}

答案 2 :(得分:0)

首先,你的$ some变量只是一个字符串。您可以使用explode()将字符串解析为数组,但它更容易以数组的形式开始:

$some = array(
    array(
        "name" => "Licensing Module",
        "nextduedate" => "2013-04-10",
        "status" => "Active",
    ),
    array(
        "name" => "Test Addon",
        "nextduedate" => "2013-04-11",
        "status" => "Active",
    )
);

现在,对于你的功能,你是在正确的轨道上,但我会清理它:

function getActiveAddons($somet) {
    if (!is_array($somet)) {
        return false;
    }

    $addons = array();
    foreach ($somet as $addon) {
        if ($addon['status'] == 'Active') {
            $addons[] = $addon['name'];
        }
    }

    if (count($addons) > 0) {
        return $addons;
    }

    return false;
}

最后你的输出(你正在调用该函数两次):

$result = getActiveAddons($some);

if ($result === false) {
    echo "No active addons!";
}
else {
    echo implode("<br />", $result);
}