1

我在 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

请帮助我。

4

3 回答 3

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);
于 2013-04-11T17:28:05.810 回答
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;
}
于 2013-04-11T17:32:24.290 回答
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);
}
于 2013-04-11T17:41:56.637 回答