PHP: Şartlı dizi üye ekleyebilir

3 Cevap php
$headers=array(
     $requestMethod." /rest/obj HTTP/1.1",
     "listable-meta: ".$listablemeta,
     "meta: ".$nonlistmeta,
     'accept: */*',
      );

In the above example, I'd like to omit the whole line if $listablemeta or $nonlistmeta is blank. Assume $listablemeta is blank. Then the array would be:

$headers=array(
     $requestMethod." /rest/obj HTTP/1.1",
     "meta: ".$nonlistmeta,
     'accept: */*',
      );

Şimdi kurulum koşullu IsEmpty can () ve buna göre dizi seti, ama ben 20 farklı değerler her tek ayar demek ile bir dizi oluşturmak istiyorsanız, her satırda değişken boş değilse, bir koşullu ayarlamak için başka bir yolu ne var -içinde-bir dizi bildiriminde? Eğer değilse, ne bu sorunu yaklaşım başka bir yolu?

Teşekkürler!

3 Cevap

Bu size yardımcı olacaktır dizi yan tümcesi içinde herhangi conditionals yapamam, ama bu sizin ihtiyaçlarınıza uygun olmalıdır:

Aşağıdaki gibi diziye geçmek istediğiniz başlıkları ise:

$requestMethod = 'GET';
$listablemeta = ''; // This shouldn't be in the final result
$nonlistmeta = 'non-listable-meta';

Bu değişkenlerin bir anahtar / değer dizi oluşturmak:

$headers = array(
               0 => $requestMethod." /rest/obj HTTP/1.1",
               'listable-meta' => $listablemeta,
               'meta' => $nonlistmeta,
               'accept', '*/*'
           );

Değer requestMethod gibi bir anahtar yoksa, sadece orada bir sayısal değeri koymak unutmayın. Sonra döngü onları aracılığıyla ve son dizi oluşturmak:

function buildHeaders($headers) {
    $new = array();

    foreach($headers as $key => $value) {
        // If value is empty, skip it
        if(empty($value)) continue;
        // If the key is numerical, don't print it
        $new[] = (is_numeric($key) ? '' : $key.': ').$value;
    }

    return $new;
}

$headers = buildHeaders($headers);

$headers şimdi böyle bir şey içermelidir:

$headers = array(
               'GET /rest/obj HTTP/1.1',
               'meta: non-listable-meta-here',
               'accept: */*'
           );

Lütfen seçenekleri dizi döngü ve değer boş değilse, sizin başlıklar diziye eklemek:

$headers = array(
  $requestMethod." /rest/obj HTTP/1.1",
  "meta: ".$nonlistmeta,
  'accept: */*'
);

$items = array(
  "item1" => "",
  "item2" => "foo"
);

foreach ($items as $key => $val) {
  if ($val != "") {
    $headers[] = $val; // only 'foo' will be passed
  }
}

Ben bildiriminde bunu yapıyor bilmiyorum, ama basit bir yardımcı işlev Propably hile yapardı:

function array_not_empty($values){
  $array = array();
  foreach($values as $key=>$value){
    if(!empty($value)) $array[$key] = $value;
  }
  return $array;
}