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

PHPで配列オブジェクトを解析する方法

PHPz
リリース: 2023-04-24 15:36:32
オリジナル
1044 人が閲覧しました

Web アプリケーションを開発する場合、配列とオブジェクトは最も一般的に使用されるデータ構造の 1 つです。スクリプト言語として、PHP は配列やオブジェクトを処理するのに非常に便利です。ただし、多次元配列、オブジェクトを含む配列、配列を含むオブジェクトなど、複雑な構造を持つデータに遭遇した場合、PHP の解析にはいくつかのスキルと方法が必要です。

この記事では、PHP が配列、オブジェクト、配列内のネストされたオブジェクト、オブジェクト内のネストされた配列などの複雑な構造データをどのように解析するかを紹介し、いくつかの例を通して解析プロセスと注意事項を説明します。

  1. 配列の解析

PHP の配列は、キーワード配列または [] 記号を使用して直接作成できます。単純な配列の解析は非常に簡単です。

<?php 
$arr = [&#39;apple&#39;, &#39;banana&#39;, &#39;pear&#39;];
echo $arr[0];   //输出apple
echo $arr[1];   //输出banana
echo $arr[2];   //输出pear
?>
ログイン後にコピー

のような添字を使用して、配列内の要素に直接アクセスできます。ただし、配列が複雑になり、多次元配列が含まれる場合、要素へのアクセスは困難になります。とても簡単。この時点で、トラバーサルを使用して配列内の要素を解析する必要があります。

<?php 
$arr = [
    &#39;fruit&#39; => [
        'apple' => ['color' => 'red', 'price' => 2],
        'banana' => ['color' => 'yellow', 'price' => 3],
        'pear' => ['color' => 'green', 'price' => 4]
    ]
];

foreach ($arr['fruit'] as $name => $item) {
    echo $name . ':' . $item['color'] . '(' . $item['price'] . '元)<br/>';
}
?>
ログイン後にコピー

上記のコードでは、foreach ループを使用して配列内の要素を走査し、配列内の各果物の色と価格を取得します。この走査方法は、あらゆるマルチレベル配列構造に適しています。

  1. オブジェクトの解析

PHP では、キーワード class および new を使用してオブジェクトを作成できます。単純なオブジェクトの解析は非常に簡単で、矢印演算子 -> を使用してオブジェクトのプロパティまたはメソッドに直接アクセスできます。

<?php 
class Person {
    public $name;
    public $age;
    public function sayHello() {
        echo &#39;Hello, I\&#39;m &#39; . $this->name . '.';
    }
}

$p = new Person();
$p->name = 'Jack';
$p->age = 18;
$p->sayHello(); //输出Hello, I'm Jack.
?>
ログイン後にコピー

ただし、オブジェクトに内部配列または複数のオブジェクトが含まれる場合、要素にアクセスするには、より複雑な走査メソッドが必要になります。

たとえば、「キャラクター」オブジェクトを作成します。各キャラクターには、「ラベル」の配列と「友達」オブジェクトが含まれます。友達オブジェクトには、「名前」と「連絡先情報」の 2 つの属性が含まれます。

<?php 
class Tag {
    public $name;
    public $value;
}

class Friend {
    public $name;
    public $contact;
}

class Person {
    public $name;
    public $age;
    public $tags = [];
    public $friend;
}
ログイン後にコピー

2 つのキャラクター オブジェクトを作成します。各オブジェクトには 2 つのタグと 1 つのフレンドが含まれます。

$p1 = new Person();
$p1->name = 'Jack';
$p1->age = 18;
$p1->tags[0] = new Tag();
$p1->tags[0]->name = 'sport';
$p1->tags[0]->value = 5;
$p1->tags[1] = new Tag();
$p1->tags[1]->name = 'music';
$p1->tags[1]->value = 3;
$p1->friend = new Friend();
$p1->friend->name = 'Lucas';
$p1->friend->contact = '123456';

$p2 = new Person();
$p2->name = 'Amy';
$p2->age = 20;
$p2->tags[0] = new Tag();
$p2->tags[0]->name = 'reading';
$p2->tags[0]->value = 3;
$p2->tags[1] = new Tag();
$p2->tags[1]->name = 'travel';
$p2->tags[1]->value = 2;
$p2->friend = new Friend();
$p2->friend->name = 'Lily';
$p2->friend->contact = '654321';
ログイン後にコピー

次に、各文字のすべての情報を調べてページに出力します。

<?php 
echo &#39;<table border="1">';
echo '<tr><th>Name</th><th>Age</th><th>Tags</th><th>Friend</th></tr>';

foreach ([$p1, $p2] as $person) {
    echo '<tr>';
    echo '<td>' . $person->name . '</td>';
    echo '<td>' . $person->age . '</td>';
    echo '<td>';
    foreach ($person->tags as $tag) {
        echo $tag->name . ':' . $tag->value . '<br/>';
    }
    echo '</td>';
    echo '<td>' . $person->friend->name . '<br/>' . $person->friend->contact . '</td>';
    echo '</tr>';
}
echo '</table>';
?>
ログイン後にコピー

上記のコードでは、2 つの foreach ループを使用しています。1 つは文字の配列を走査し、もう 1 つは文字内のラベルの配列を走査します。同時に、矢印演算子 -> を使用して友人情報を取得し、出力します。

  1. 配列内のオブジェクトを解析する

配列を処理する場合、配列内の各要素がオブジェクトである場合、トラバーサルを使用して配列を解析する必要があります。要素を取得し、矢印演算子 -> を使用して各オブジェクト内のプロパティを取得します。

たとえば、学生情報を保存する配列を作成します。各学生には、名前、年齢、職業という 3 つの属性があります。

<?php 
class Student {
    public $name;
    public $age;
    public $job;
}

$arr = [
    new Student(),
    new Student(),
    new Student()
];

$arr[0]->name = 'Lucas';
$arr[0]->age = 18;
$arr[0]->job = 'Student';

$arr[1]->name = 'Lily';
$arr[1]->age = 19;
$arr[1]->job = 'Engineer';

$arr[2]->name = 'Jack';
$arr[2]->age = 20;
$arr[2]->job = 'Teacher';
?>
ログイン後にコピー

foreach ループを使用して配列内の各要素を走査し、矢印演算子 -> を使用して生徒の 3 つの属性を取得して出力します。

<?php 
foreach ($arr as $item) {
    echo $item->name . '(' . $item->age . ',' . $item->job . ')<br/>';
}
?>
ログイン後にコピー
  1. オブジェクト内の配列を解析する

オブジェクトを処理する必要があり、オブジェクト内の属性が配列である場合、トラバーサルを使用してオブジェクトを解析する必要があります。配列要素を取得し、矢印演算子 -> を使用して、オブジェクト内の他のプロパティを取得します。

たとえば、学生オブジェクトを作成すると、学生には名前、年齢、職業、および複数の住所があります。住所には、州、市、地区、番地情報、およびデフォルトの住所かどうかを示すブール属性が含まれます。

<?php 
class Address {
    public $province;
    public $city;
    public $district;
    public $street;
    public $isDefault;
}

class Student {
    public $name;
    public $age;
    public $job;
    public $addresses = [];
}

$p = new Student();
$p->name = 'Lucas';
$p->age = 18;
$p->job = 'Student';

$p->addresses[] = new Address();
$p->addresses[0]->province = '江苏省';
$p->addresses[0]->city = '南京市';
$p->addresses[0]->district = '鼓楼区';
$p->addresses[0]->street = '汉口路1号';
$p->addresses[0]->isDefault = true;

$p->addresses[] = new Address();
$p->addresses[1]->province = '江苏省';
$p->addresses[1]->city = '南京市';
$p->addresses[1]->district = '玄武区';
$p->addresses[1]->street = '北京东路1号';
$p->addresses[1]->isDefault = false;
?>
ログイン後にコピー

student オブジェクト内のアドレス配列を走査し、矢印演算子 -> を使用して学生の他の属性を取得し、ページに出力します。

<?php 
echo $p->name . '(' . $p->age . ',' . $p->job . ')<br/>';
foreach ($p->addresses as $addr) {
    echo $addr->province . $addr->city . $addr->district . $addr->street;
    echo '默认地址:' . ($addr->isDefault ? '是' : '否') . '<br/>';
}
?>
ログイン後にコピー

要約すると、PHP は、プロパティを走査してアクセスすることで、配列、オブジェクト、配列内のネストされたオブジェクト、オブジェクト内のネストされた配列などの複雑な構造データを解析するには、実際の状況に応じてさまざまなメソッドを使用する必要があります。分析データ。複雑なデータを処理する場合、データの構造と使用シナリオに基づいて適切な解析方法を選択する必要があります。

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

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