ThinkPHP アレイの置き換えに関する包括的な分析

PHPz
リリース: 2023-04-21 14:08:11
オリジナル
718 人が閲覧しました

配列の操作は、PHP プログラムを作成する際の一般的なタスクです。 ThinkPHP プロジェクトでは、配列内のすべての空の文字列 ('') を null に置き換えるなど、配列内の特定の値を置き換える必要があることがよくあります。この記事では、ThinkPHP におけるさまざまな配列置換方法を紹介します。

1. 通常の配列の置換

まずは、通常の配列の置換方法を見てみましょう。 4 つの要素を含む配列 $arr があるとします。

$arr = array(

'name' => '张三',
'age' => 18,
'email' => 'zhangsan@example.com',
'gender' => '男',
ログイン後にコピー
ログイン後にコピー

);

配列 文字列を null に置き換えるには、foreach ループを使用して配列を走査し、各要素を置き換えます。コードは次のとおりです。

foreach ($arr as &$value) {

if ($value === '') {
    $value = null;
}
ログイン後にコピー
ログイン後にコピー

}

このうち、&$value は配列要素への参照を表します。したがって、元の配列を直接変更できます。上記のコードを実行すると、$arr の値は次のようになります:

array(

'name' => '张三',
'age' => 18,
'email' => 'zhangsan@example.com',
'gender' => '男',
ログイン後にコピー
ログイン後にコピー

);

指定したキー名の値を置き換える場合は、ループ内で実行できます。 条件判断の追加。コードは次のとおりです。

foreach ($arr as $key => &$value) {

if ($key === 'email' && $value === 'zhangsan@example.com') {
    $value = 'lisi@example.com';
}
ログイン後にコピー

}

上記のコードでは、電子メールをターゲットにしていますキー名の値が置き換えられます。つまり、「zhangsan@example.com」が「lisi@example.com」に置き換えられます。このコードを実行すると、$ の値が置き換えられます。 arr は次のようになります:

array(

'name' => '张三',
'age' => 18,
'email' => 'lisi@example.com',
'gender' => '男',
ログイン後にコピー

);

ただし、この方法には欠点があります。配列が大きい場合、走査と置換にループを使用すると効率が悪くなります。非常に低くなります。したがって、より効率的な置き換え方法を見つける必要があります。

2. 再帰的な配列置換

多次元配列内のすべての空の文字列を null に置換する必要がある場合、ループを使用するだけでは十分ではありません。現時点では、再帰的手法を使用して配列全体を走査し、置換対象の最も基本的な要素が見つかるまで各サブ配列を再帰的に実行できます。

コードは次のとおりです。

function array_replace_recursive_null($arr) {

foreach ($arr as $key => &$value) {
    if (is_array($value)) {
        $value = array_replace_recursive_null($value);
    } elseif ($value === '') {
        $value = null;
    }
}
return $arr;
ログイン後にコピー

}

上記のコードでは、まず現在の要素が配列の場合はarray_replace_recursive_null()関数を再帰的に呼び出して置換し、そうでない場合は現在の要素が空文字列かどうかを判定し、空文字列であればnullに置換します。

この関数を使用して配列を置き換えます。コードは次のとおりです:

$arr = array(

'name' => '张三',
'age' => 18,
'contact' => array(
    'email' => 'zhangsan@example.com',
    'phone' => '',
    'address' => array(
        'province' => '广东省',
        'city' => '',
        'district' => '番禺区',
    ),
),
ログイン後にコピー
ログイン後にコピー

);
$arr = array_replace_recursive_null($arr);

上記のコードを実行すると、$arr の値は次のようになります:

array(

'name' => '张三',
'age' => 18,
'contact' => array(
    'email' => 'zhangsan@example.com',
    'phone' => null,
    'address' => array(
        'province' => '广东省',
        'city' => null,
        'district' => '番禺区',
    ),
),
ログイン後にコピー
ログイン後にコピー

);

再帰的配列置換は多次元配列置換全体に適用されますが、単一値の置換には依然としてループの走査が必要です。

3. array_map() 関数を使用して、PHP の array_map() 関数を置き換えます。指定したコールバック関数を配列内の各要素に適用し、新しい配列を返すことができます。この関数を使用して、配列内の値を置き換えることができます。

次のデータを含む配列があるとします。

$arr = array('apple', 'orange', 'banana', '');

We 空の文字列を null に置き換える場合は、array_map() 関数とコールバック関数を使用できます。

コードは次のとおりです:

function replace_null($value) {

return $value === '' ? null : $value;
ログイン後にコピー

}

$arr = array_map('replace_null', $arr) ;


コードでは、 replace_null() コールバック関数を記述しました。$value が空の文字列の場合は null を返し、それ以外の場合は $value を返します。この関数はコールバック関数として array_map() 関数に渡され、配列内の値の置換が完了します。

4. array_walk_recursive() 関数を使用して置き換える

array_walk_recursive() 関数は、ユーザー定義関数を配列またはオブジェクトの各要素に再帰的に適用するために使用されます。 array_map() に似ていますが、多次元配列を再帰的に走査できます。この関数を使用して、多次元配列内のすべての値を置き換えることができます。

空の文字列を含む多次元配列 $arr があるとします。

$arr = array(

'name' => '张三',
'age' => 18,
'contact' => array(
    'email' => 'zhangsan@example.com',
    'phone' => '',
    'address' => array(
        'province' => '广东省',
        'city' => '',
        'district' => '番禺区',
    ),
),
ログイン後にコピー
ログイン後にコピー

);

Now 、その中のすべての空の文字列を null に置き換える必要があります。これは、array_walk_recursive() 関数とコールバック関数を使用して実現できます。

コードは次のとおりです。

function replace_null_recursive(&$value, $key) {

if ($value === '') {
    $value = null;
}
ログイン後にコピー
ログイン後にコピー

}

array_walk_recursive($arr, 'replace_null_recursive');


コードでは、 replace_null_recursive() コールバック関数を記述しました。$value が空の文字列の場合は、null に置き換えて、その関数をコールバック関数として array_walk_recursive() 関数に渡します。

上記のコードを実行すると、$arr の値は次のようになります:

array(

'name' => '张三',
'age' => 18,
'contact' => array(
    'email' => 'zhangsan@example.com',
    'phone' => null,
    'address' => array(
        'province' => '广东省',
        'city' => null,
        'district' => '番禺区',
    ),
),
ログイン後にコピー
ログイン後にコピー

);

5. 概要

この記事では、通常の配列置換、再帰的配列置換、array_map() 関数置換の使用、array_walk_recursive() 関数置換の使用など、ThinkPHP プロジェクトで配列を置換するさまざまな方法を紹介します。各方法には適用可能なシナリオがあり、実際の状況に基づいて最も適切な方法を選択することで、時間とエネルギーを節約できます。

最後に、この記事が読者の役に立ち、配列の置換を扱う際にタスクをより効率的に完了できるようになれば幸いです。

以上がThinkPHP アレイの置き換えに関する包括的な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!