if语句的PHP变量

时间:2010-12-03 01:08:29

标签: php arrays variables

好的,我想做这样的事情:

$which = !empty($param_id) ? "['groups'][$param_id]" : "['groups']";

而且我希望能够做到这样的事情......

$all_groups . $which = array(
    -1 => array(
    'id' => '-1',
    'name' => $txt['parent_guests_only'],
    'checked' => in_array('-1', $checked) || in_array('-3', $checked),
    'is_post_group' => false,
)

如果!empty($param_id)

,我需要它来构建一个这样的数组
$all_groups['groups'][$param_id] = array(the array info);

但如果$ param_id为空,则应该改为:

$all_groups['groups'] = array(the array info);

我认为我不能连接它,或者我可以吗?

有人可以帮我吗?这在整个函数中发生了很多次,所以我不想每次都使用if ... else ...语句。太多了,想着为他们所有人提供快速的方法。

谢谢:)

编辑,这是有问题的功能:

function ListGroups($checked = array(), $unallowed = array(), $order = array(), $param_id = 0)
{
    global $context, $smcFunc, $txt;

    // We'll need this for loading up the names of each group.
    if (!loadLanguage('ManageBoards'))
        loadLanguage('ManageBoards');

    if (empty($checked))
        return array();

    $all_groups['groups'][$param_id] = array();

    if (!in_array('-1', $unallowed))
        // Guests
        $all_groups['groups'][$param_id] = array(
            -1 => array(
                'id' => '-1',
                'name' => $txt['parent_guests_only'],
                'checked' => in_array('-1', $checked) || in_array('-3', $checked),
                'is_post_group' => false,
            )
        );

    if (!in_array('0', $unallowed))
    {
        // Regular Members
        if (!empty($all_groups['groups']))
            $all_groups['groups'][$param_id] += array(
                0 => array(
                    'id' => '0',
                    'name' => $txt['parent_members_only'],
                    'checked' => in_array('0', $checked) || in_array('-3', $checked),
                    'is_post_group' => false,
                )
            );
        else
            $all_groups['groups'][$param_id] = array(
                0 => array(
                    'id' => '0',
                    'name' => $txt['parent_members_only'],
                    'checked' => in_array('0', $checked) || in_array('-3', $checked),
                    'is_post_group' => false,
                )
            );
    }

    // Load membergroups.
    $request = $smcFunc['db_query']('', '
        SELECT group_name, id_group, min_posts
        FROM {db_prefix}membergroups
        WHERE id_group > {int:is_zero}',
        array(
            'is_zero' => 0,
        )
    );
    while ($row = $smcFunc['db_fetch_assoc']($request))
    {
        if (!in_array($row['id_group'], $unallowed))
        {
            $all_groups['groups'][(int) $param_id][(int) $row['id_group']] = array(
                'id' => $row['id_group'],
                'name' => trim($row['group_name']),
                'checked' => in_array($row['id_group'], $checked) || in_array('-3', $checked),
                'is_post_group' => $row['min_posts'] != -1,
            );
        }
    }
    $smcFunc['db_free_result']($request);

    // Let's sort these arrays accordingly!
    if (!empty($order))
    {
        $all_groups['groups'][$param_id] = sortGroups($all_groups['groups'][$param_id], $order);
        $context['group_order' . $param_id] = implode(', ', $order);
    }
    else
    {
        $context['group_order' . $param_id] = '';
        sort($all_groups['groups'][$param_id]);
        $x = 0;
        foreach ($all_groups['groups'][$param_id] as $key => $value)
        {
            $x++;
            $context['group_order' . $param_id] .= $x < count($all_groups['groups'][$param_id]) ? $value['id'] . ', ' : $value['id'];
        }
    }

    return $all_groups['groups'][$param_id];
}

我需要检查!empty($ param_id),如果是这样,它需要构建没有$ param_id的$ all_groups ['groups']数组。

因此需要在if (!empty($params_id))中添加一个检查来构建数组,如下所示:$all_groups['groups'][$params_id]或者像这样构建它:$all_groups['groups']。我不想在这里有一堆if ... else ...语句,只需1或5个班轮就可以了!

谢谢大家:)

3 个答案:

答案 0 :(得分:3)

不要过度复杂化。 :)

$array = array(
    /* contents */
);

if (!empty($param_id)) {
    $all_groups['groups'][$param_id] = $array;
} else {
    $all_groups['groups'] = $array;
}

在此之前我不知道$all_groups['groups']的样子;如果它是空的,我会把它缩短为:

$all_groups['groups'] = array(
    /* contents */
);

if (!empty($param_id)) {
    $all_groups['groups'] = array($param_id => $all_groups['groups']);
}

答案 1 :(得分:0)

if (!empty($param_id)) {
    $which = &$all_groups['groups'][$param_id]
} else {
    $which = &$all_groups['groups'];
}
$which = array(
    -1 => array(
    'id' => '-1',
    'name' => $txt['parent_guests_only'],
    'checked' => in_array('-1', $checked) || in_array('-3', $checked),
    'is_post_group' => false,
);

unset($which); // unset $which, if you want to use this variable
               // in this scope once again

答案 2 :(得分:0)

一般来说,参考是解决方案。请参阅@zerkms的回答。

但是,如果可能的话,我会尝试重新设计您的数据结构,这样您就不必诉诸这种类型的条件行为。例如,使用default作为默认缺失键:

$which = !empty($param_id) ? $param_id : 'default';
$all_groups['groups'][$which] = array( ... );

我不知道你的情况是否可行,但这可能更容易管理。

其他可能的解决方案:

$tmp = array( ... );
if ($cond) 
  $foo = $tmp;
else
  $bar = $tmp;

或:

function make_array( ... )
{
  return array( ... );
}

if ($cond)
  $foo = make_array( ... );
else
  $bar = make_array( ... );