PHP GET parametre kombinasyonları test etmek için bir kısa yolu var mı?

2 Cevap php

GET params çekler için aşağıdaki kodu. Sayfada iki seçer vardır ki filtre tipi ve yaş grubuna göre bir liste.

Ben türü / yaş kombinasyonları test hangi koşullu refactor için bir yol arıyorum. Bunu yazmak için daha açık / kısa yolu var mı?

if ( isset($_REQUEST['type']) || isset($_REQUEST['age']) )
{
  // we need to do something

  $type = ( $_REQUEST['type'] == 'all' ? false : (int)($_REQUEST['type']) );
  $age = ( $_REQUEST['age'] == 'all' ? false : (int)($_REQUEST['age']) );


  // test the possible type/age combinations

  if ($type && $age) 
  {            
    $cats = $type . "," . $age;
  }
  elseif ($type)
  {
    $cats = $type;
  }
  elseif ($age)
  {
    $cats = $age;
  }
  else
  {
    $cats = false;
  }

  // do stuff with $cats;

}

2 Cevap

$cat = array(
  $_REQUEST['type'] == 'all' ? false : intval($_REQUEST['type']),
  $_REQUEST['age'] == 'all' ? false : intval($_REQUEST['age'])
);

$cat = join(',', array_filter($cat));
echo $cat;

Her iki ['type'] ve ['yaş'] 'tüm' sonuç "" olacak ise, yani string (0). Yani aynı değil. Bu bir sorun olsun ya da olmasın $ kedi nasıl kullandığınıza bağlıdır. Örneğin Boş bir dize boolean bağlamında false dönüştürülür beri if (!$cat) çalışmaya devam edecektir.

oops ve başka bir fark var: düzenlemek. Ben (özel) geri çağırma olmadan array_filter() kullanın.

If no callback is supplied, all entries of input equal to FALSE (see converting to boolean) will be removed.

E.g. $_REQUEST = array('type'=>'0', 'age'=>'0') will also result in $cat="".
Is this a problem in your context?

Daha anlaşılır ise emin, ama en azından :-) ... biraz daha özlü değil

$cats = str_replace('all', '', "${_GET['type']},${_GET['age']}");
$cats = preg_replace('/^,|,$/', '', $cats);

[EDIT] daha basit bir sürümü ver ...