3


0

PHP:条件付きで配列メンバーを追加する
$headers=array(
     $requestMethod." /rest/obj HTTP/1.1",
     "listable-meta: ".$listablemeta,
     "meta: ".$nonlistmeta,
     'accept: */*',
      );

上記の例で、$ listablemetaまたは$ nonlistmetaが空白の場合、行全体を省略したいと思います。 $ listablemetaが空白であると仮定します。 配列は次のようになります。

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

条件付きのisempty()をセットアップし、それに応じて配列を設定できるようになりましたが、各行の変数が空でない場合にそれぞれ設定する20個の異なる値を持つ配列を作成したい場合は、条件を設定する別の方法があります-with—​配列宣言? そうでない場合、この問題にアプローチする別の方法は何ですか?

ありがとうございます。

3 Answer


2


オプション配列をループし、値が空でない場合、ヘッダー配列に追加します。

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


1


宣言でそれを行うことについては知りませんが、単純なヘルパー関数が適切にトリックを行います:

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


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: */*'
           );