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

В приведенном выше примере я хотел бы опустить всю строку, если $ listablemeta или $ nonlistmeta пуст. Предположим, что $ listablemeta пуст. Тогда массив будет:PHP: Условно добавить элементы массива

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

Теперь я могу настроить условное IsEmpty() и установить массив соответственно, но что, если я хочу, чтобы построить массив с скажем, 20 различных значений каждого только параметр, если переменная на каждом строка не пуста, есть ли другой способ установить условное -within-объявление массива? Если нет, то каким образом можно подойти к этой проблеме?

Спасибо!

ответ

1

Вы не можете делать какие-либо условными внутри пункта массива, которые помогут вам с этим, но это должно удовлетворить ваши потребности:

Если у заголовков НУ хотите передать в массив следующим образом:

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

Построить массив ключ/значение этих переменных:

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

Обратите внимание, что если значение не имеет ключа, как в requestMethod, просто введите там числовое значение. Затем цикл их через и построить окончательный массив:

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 теперь должен содержать что-то вроде этого:

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

Loop через массив параметров, и если значение не пусто, добавьте его в заголовки массива:

$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 
    } 
} 
+0

Это не попадает в точку, это '$ headers' массив, который должен быть отфильтрован; если '$ nonlistmeta' пуст, эта строка должна быть удалена из' $ headers'. Ваш пример просто добавляет новые элементы в массив, который даже не попадет в форму 'key: value'. –

1

Я не знаю, делать это в объявлении, но простой вспомогательной функции бы Propably сделать трюк:

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

Почему это было приостановлено? –

Смежные вопросы