Переменные PHP для операторов if - PullRequest
0 голосов
/ 03 декабря 2010

Хорошо, я хочу сделать что-то вроде этого:

$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 ... каждый раз. Было бы слишком много, если подумать о 1 быстром подходе ко всем из них.

Спасибо:)

РЕДАКТИРОВАТЬ, вот эта функция:

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), если это так, нужно построить массив $ all_groups ['groups'] без $ param_id.

Поэтому необходимо добавить проверку для if (!empty($params_id)) построения массива следующим образом: $all_groups['groups'][$params_id] иначе построить его следующим образом: $all_groups['groups']. Я не хочу, чтобы здесь было несколько операторов if ... else ..., просто 1 или 5 лайнер были бы БОЛЬШИМИ!

Спасибо, ребята:)

Ответы [ 3 ]

3 голосов
/ 03 декабря 2010

Не переусердствуйте.:)

$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']);
}
0 голосов
/ 03 декабря 2010

Вообще говоря, ссылки - это решение. Смотрите ответ @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( ... );
0 голосов
/ 03 декабря 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...