سؤال

هل من الممكن إعادة كتابة هذا ليكون أقصر بطريقة أو بأخرى؟

if (isset($_POST['pic_action'])){
  $pic_action=$_POST['pic_action'];
}
else { 
  $pic_action=0;
}

لقد رأيته في مكان ما ولكن نسيت ...:/

راجع للشغل ، يرجى توضيح الرمز الخاص بك أيضا إذا أردت!

شكرًا

هل كانت مفيدة؟

المحلول

يمكنك استخدام المشغل الشرطي ?::

$pic_action = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;

تعبير المشغل الشرطي expr1 ? expr2 : expr3 يقيم قيمة الإرجاع expr2 إذا كانت قيمة الإرجاع التي تم تقييمها expr1 هو حقيقي; ؛ وإلا فإن التعبير يقيم قيمة الإرجاع التي تم تقييمها expr3. حتى إذا isset($_POST['pic_action']) يقيم حقيقي, ، يقيم التعبير بأكمله على القيمة التي تم تقييمها $_POST['pic_action'] وإلى القيمة التي تم تقييمها 0 خلاف ذلك.

لذلك باختصار: إذا isset($_POST['pic_action']) صحيح، $pic_action سوف تحمل قيمة $_POST['pic_action'] و 0 خلاف ذلك.

نصائح أخرى

ربما تكون إجابة Gumbo هي أفضل طريقة.

يمكن أيضًا كتابتها على النحو التالي:

$pic_action = 0;
if (isset($_POST['pic_action'])){
    $pic_action=$_POST['pic_action'];
}
$pic_action=(isset($_POST['pic_action']))?($_POST['pic_action']):0;
$pic_action = array_get($_POST, 'pic_action', 0);

الخط أعلاه يتطلب array_get وظيفة محددة أدناه. مصدر من كوهانا Arr صف دراسي. وظيفة صغيرة جدا وعامة. يمكن استخدامها في جميع المصفوفات ، على سبيل المثال $_GET.

/**
 * Retrieve a single key from an array. If the key does not exist in the
 * array, the default value will be returned instead.
 *
 * @param   array   array to extract from
 * @param   string  key name
 * @param   mixed   default value
 * @return  mixed
 */
function array_get(array $array, $key, $default = NULL)
{
    return isset($array[$key]) ? $array[$key] : $default;
}

لفترة أطول ، ولكن يمكن إعادة استخدامها:

$pic_action = QueryPost('pic_action', 0);

function QueryPost($name, $default='', $valid=false) {
    if (!isset($_POST[$name])) return $default;
    if (($valid) and (empty($_POST[$name]))) return $default;
    return $_POST[$name];
}

أو قد يكون لديك وظيفة QueryPost تقوم بشيء من التحقق من الصحة أثناء وجودك فيه.

$pic_action = QueryPost('pic_action', 'int', 0);

function QueryPost($name, $rule, $default='', $valid=false) {
    // this shouldn't be too hard to write
}

يمكنك ان تفعل:

$_POST['pic_action'] = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top