34

次のようなデータをサニタイズするための三項式を書くのにうんざりしています。

$x = isset($array['idx']) ? $array['idx'] : null;
// and
$x = !empty($array['idx']) ? $array['idx'] : null;

特定の配列の配列要素の値を取得するためのネイティブな方法またはZF アクセサー/フィルターはありますか?

  • 無効にするerror_reporting
  • 三元isset/emptyチェック
  • エラー制御演算子@
  • 独自のグローバル関数またはアプリケーション アクセサー/フィルターの作成

何かのようなもの:

$x = get_if_set($array['idx']);
// or 
$x = Zend_XXX($array, 'idx')
4

4 に答える 4

49

PHP7 では、null 合体演算子が ??導入されました。あなたがそれを実行できるほど幸運であると仮定すると、あなたはただ行うことができます

$x = $array['idx'] ?? null;
于 2016-06-18T08:17:21.590 に答える
31

PHP 7.0 以降

Null Coalescing Operator DocsMigrationRFCのAndrea FauldsNikita Popovのおかげで、物事ははるかに簡単になりました。 ??

$x = $array['idx'] ?? NULL;

または$default:

$x = $array['idx'] ?? $default ?? NULL;

Like issetorempty警告を出さず、式は右にフォールスルーします (設定されていない場合)。設定されていて NULL でない場合、値が取得されます。これは$default、未定義の場合でも、常に前の例で動作する方法でもあります。


PHP 7.4 以降

Midori Kocakのおかげで、Null Coalescing Assignment Operator ??=DocsであるRFC (後で見逃したものの 1 つ??) で、デフォルト値を直接割り当てることができます。

$array['idx'] ??= null;
$x = $array['idx'];

ほど頻繁には使用しません??が、特にデータ処理ロジックを分割して初期設定を行いたい場合は、それについて知っておくとよいでしょう。


元の古い答え


「デフォルト」値として NULL のみが必要な限り、エラー抑制演算子を利用できます。

$x = @$array['idx'];

批判:エラー抑制演算子の使用にはいくつかの欠点があります。まず、エラー抑制演算子を使用するため、コードのその部分に問題がある場合、問題を簡単に回復できません。さらに、未定義の場合の標準的なエラー状況は、悲鳴を探して汚染します。あなたのコードは、可能な限り正確に表現されていません。もう 1 つの潜在的な問題は、無効なインデックス値を使用することです。たとえば、インデックスにオブジェクトを挿入するなどです。これは見過ごされがちです。

警告を防ぎます。ただし、他のデフォルト値も許可したい場合は、ArrayAccessインターフェイスを介して配列オフセットへのアクセスをカプセル化できます。

class PigArray implements ArrayAccess
{
    private $array;
    private $default;

    public function __construct(array $array, $default = NULL)
    {
        $this->array   = $array;
        $this->default = $default;
    }

    public function offsetExists($offset)
    {
        return isset($this->array[$offset]);
    }

    public function offsetGet($offset)
    {
        return isset($this->array[$offset]) 
            ? $this->array[$offset] 
            : $this->default
            ;
    }

    public function offsetSet($offset, $value)
    {
        $this->array[$offset] = $value;
    }

    public function offsetUnset($offset)
    {
        unset($this->array[$offset]);
    }
}

使用法:

$array = array_fill_keys(range('A', 'C'), 'value');
$array = new PigArray($array, 'default');
$a     = $array['A'];   # string(13) "value"
$idx   = $array['IDX']; # NULL "default"

var_dump($a, $idx);

デモ: https://eval.in/80896

于 2012-04-24T19:40:09.707 に答える
0

変数を宣言し、初期値を与えます。

$x = NULL;
$y = 'something other than NULL';

これで、xキーとyキーを持つ配列$ myArrayがある場合、抽出関数は初期値を上書きします(そうしないように構成することもできます)

$myArray['x'] = 'newX';
extract($myArray);
//$x is now newX

キーが存在しない場合、変数の初期値は残ります。また、他の配列キーをそれぞれの変数に配置します。

于 2012-04-24T16:01:03.377 に答える