ホームページ > バックエンド開発 > PHPの問題 > PHPでオブジェクトを配列に変換する方法

PHPでオブジェクトを配列に変換する方法

PHPz
リリース: 2023-04-20 13:40:38
オリジナル
2888 人が閲覧しました

PHP オブジェクトの配列への変換は、多くのプログラマーが開発中によく遭遇する問題の 1 つです。オブジェクトと配列はどちらも PHP で一般的に使用されるデータ型ですが、異なります。オブジェクトはクラスのインスタンスを表す複合データ型であるのに対し、配列は複数のスカラー、配列、オブジェクト、およびその他の要素を含む順序付けされたコレクションです。オブジェクトを配列に変換するにはどうすればよいですか?この記事ではいくつかの方法を紹介します。

方法 1: 強制型変換を使用する

強制型変換を使用して、オブジェクトを配列に変換できます。キャストする場合は、オブジェクトを配列に渡し、(array) を使用してオブジェクトを配列にキャストします。例:

class Student{
    public $name;
    public $age;
}
$stu = new Student();
$stu->name = "Tom";
$stu->age = 18;
$arr = (array)$stu;
print_r($arr);
ログイン後にコピー

出力結果は次のとおりです:

Array
(
    [name] => Tom
    [age] => 18
)
ログイン後にコピー
ログイン後にコピー

この方法はシンプルで効果的ですが、キャスト型変換を実行すると、強制的な変換により一部の属性が失われる可能性があることに注意してください。 type 変換により、オブジェクト内の非公開プロパティ (プライベートおよび保護) が破棄されます。

方法 2: オブジェクト メソッドを使用する

オブジェクト内の非パブリック プロパティを配列に変換する場合は、オブジェクト メソッド get_object_vars() を使用してこれを実現できます。 get_object_vars() は、オブジェクトの属性とその値を含む配列を返します。例:

class Student{
    public $name;
    private $age;
    public function __construct($name, $age){
        $this->name = $name;
        $this->age = $age;
    }
    public function getAge(){
        return $this->age;
    }
}
$stu = new Student("Tom", 18);
$arr = get_object_vars($stu);
$arr['age'] = $stu->getAge();
print_r($arr);
ログイン後にコピー

出力結果は次のとおりです:

Array
(
    [name] => Tom
    [age] => 18
)
ログイン後にコピー
ログイン後にコピー

get_object_vars() メソッドを使用すると、オブジェクト内のプライベート属性を保持したまま、オブジェクトを配列に変換できます。

メソッド 3: 再帰的変換

再帰的メソッドは、オブジェクトと配列を再帰的に配列に変換します。このメソッドは、他のオブジェクトまたは配列内にネストされている場合を含め、あらゆる状況でオブジェクトを配列に変換します。以下は再帰的変換の例です:

class Student{
    public $name;
    public $age;
    public function __construct($name, $age){
        $this->name = $name;
        $this->age = $age;
    }
}
class Grade{
    public $name;
    public $students;
    public function __construct($name, $students){
        $this->name = $name;
        $this->students = $students;
    }
}
$stu1 = new Student("Tom", 18);
$stu2 = new Student("Jerry", 19);
$grade = new Grade("一年级", [$stu1, $stu2]);

function objectToArray($d) {
    if (is_object($d)) {
        $d = get_object_vars($d);
    }
    if (is_array($d)) {
        return array_map(__FUNCTION__, $d);
    }
    else {
        return $d;
    }
}
$arr = objectToArray($grade);
print_r($arr);
ログイン後にコピー

出力は次のとおりです:

Array
(
    [name] => 一年级
    [students] => Array
        (
            [0] => Array
                (
                    [name] => Tom
                    [age] => 18
                )

            [1] => Array
                (
                    [name] => Jerry
                    [age] => 19
                )

        )

)
ログイン後にコピー
ログイン後にコピー

上で述べたように、再帰的メソッドはネストされた配列およびオブジェクト構造内のデータに非常に役立ちます。

方法 4: json_decode() および json_encode() を使用する

最後の方法は、json_decode() および json_encode() 関数を使用することです。オブジェクトを JSON 形式の文字列にエンコードし、 json_decode() を使用して配列にデコードします。このアプローチは、ネストされた配列とオブジェクトでも機能します。例:

class Student{
    public $name;
    public $age;
    public function __construct($name, $age){
        $this->name = $name;
        $this->age = $age;
    }
}
class Grade{
    public $name;
    public $students;
    public function __construct($name, $students){
        $this->name = $name;
        $this->students = $students;
    }
}
$stu1 = new Student("Tom", 18);
$stu2 = new Student("Jerry", 19);
$grade = new Grade("一年级", [$stu1, $stu2]);

$json = json_encode($grade);
$arr = json_decode($json, true);
print_r($arr);
ログイン後にコピー

出力は次のようになります:

Array
(
    [name] => 一年级
    [students] => Array
        (
            [0] => Array
                (
                    [name] => Tom
                    [age] => 18
                )

            [1] => Array
                (
                    [name] => Jerry
                    [age] => 19
                )

        )

)
ログイン後にコピー
ログイン後にコピー

json_decode() と json_encode() は PHP オブジェクトを配列に簡単に変換できますが、プライベート プロパティを配列に変換することはできません。

この記事では、オブジェクトを配列に変換する 4 つの異なる方法を紹介します。実際の開発では、実情に応じて最適な方法を選択する必要があります。

以上がPHPでオブジェクトを配列に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート