PHPのend()配列関数の結果を変数に割り当てて、結果を操作する必要があるのはなぜですか?

StackOverflow https://stackoverflow.com/questions/1633301

  •  06-07-2019
  •  | 
  •  

質問

次のように配列の最後の空のエントリを削除しようとしましたが、エラーが発生します:"書き込みコンテキストで関数の戻り値を使用できません":

  if (empty(end($crontabEntryList))) {
    array_pop($crontabEntryList);
  }

(下部のように)最初にendの戻り値を変数に割り当てた場合、空の場合は最後のエントリを削除できます。 end()の手動エントリに従って、最後の要素の値を返すか、空の場合はFALSEを返します配列。"グーグルで考えられる説明を見つけました。ブール値は「書き込み可能」ではありません。

しかし、このエラーは私の特定のコンテキストで返され、おそらく SOでここに記載されているその他。ブール値が返される可能性があるからです。私のインスタンスの配列は明らかに空ではなく、したがってfalseではなくend()が「最後の要素の値を返す」ためです。

私の仮定は正しいですか?どちらの場合、これはPHPの緩やかに型付けされた性質と矛盾していませんか?それとも、配列の最後の要素が「書き込み不可」だからでしょうか?その場合、「書き込みコンテキスト」を正確に構成するものは何ですか? PHPで?

  $last = end($crontabEntryList);
  if (empty($last)) {
    array_pop($crontabEntryList);
  }
役に立ちましたか?

解決

これは、end()または" writability"とは関係ありません。ブール値の

empty()および isset()は関数ではなく、言語の構成要素です。

empty() のドキュメント:

  

注:empty()は変数を次のようにのみチェックします   それ以外は解析になります   エラー。言い換えれば、次の   動作しません:empty(trim($ name))。

再度: only 変数は empty()に渡すことができます。

他のヒント

empty()はそのように奇妙です。私はそれを受け入れ、可能な場合は回避することを学びました(あなたが提供した解決策を使用して)。

配列から空の値を消去しようとしている場合は、 array_filter()

end()の戻り値に負のチェックを使用することを提案できますか?見ての通り、end()は最後の要素の値を返すか、空の場合はFALSEを返します。したがって、追加のコードを使用して空でテストする別の変数を作成する代わりに、end()の戻り値をテストするだけです。

/* Edited */
if(!(trim(end($crontabEntryList)))) {
   array_pop($crontabEntryList);
}

文字列の配列を使用してシステムでこれをテストしましたが、目的の効果があるようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top