ホームページ  >  記事  >  PHPフレームワーク  >  Thinkphp volist 複数ループで配列キー値をそのまま出力

Thinkphp volist 複数ループで配列キー値をそのまま出力

藏色散人
藏色散人転載
2020-06-05 14:27:003583ブラウズ

以下は、thinkphp フレームワーク開発コラムによる、Thinkphp volist マルチループ出力配列キー値の使用法をそのまままとめたものです。困っている友人の役に立てば幸いです。

Thinkphp volist 複数ループで配列キー値をそのまま出力

最近、プロジェクトの都合により volist を使用する必要があります。このプロセス中に、主に Volist がループで複数のデータを出力するときにキーを出力する方法など、いくつかの小さな問題に遭遇しました。インターネットで多くの情報を確認しましたが、ほとんどの情報が Thinkphp マニュアルの volist タグの手順を貼り付けてコピーしただけであったことに非常にがっかりしました。他の人を助けるために、私はこの記事を書くことにしました。 (ここで使用するフレームワークは Thinkphp3.2 であり、その他の関連知識は PHP 配列です)。まず、コントローラーにコードを投稿します。

public function check()
{
    $multiArr = [['a' => ['num' => '1',], 'b' => ['num' => '2',]], ['c' => ['num' => '3',], 'd' => ['num' => '4',]]];
    $this->assign('list', $multiArr);
    $this->display();
}

出力される形式は次のとおりです。

Array
(
    [0] => Array
        (
            [a] => Array
                (
                    [num] => 1
                )
            [b] => Array
                (
                    [num] => 2
                )
        )
    [1] => Array
        (
            [c] => Array
                (
                    [num] => 3
                )
            [d] => Array
                (
                    [num] => 4
                )
        )
)

明らかに、これは複数の配列です。 volist を使用してキーの値を取得したい場合、コードは次のようになります。

<tr>
<volist name="list" id="data" key="k">
<td>{$k}</td>
<td>
<tr>
<volist name="data" id="vo">
<td>{$key}</td>
<td>{$vo.num}</td>
</volist>
</tr>
</td>
</volist>
</tr>

得られた結果は次のとおりです。

1
a   1   b   2
2
c   3   d   4

ここで、キーの値が取得されていることは明らかです。外側の重いループのキー値はシステムのデフォルトであり、この内側の重いループからのキー値は、ループによって制御されるのではなく、データ自体によって決定されます。

http://document.thinkphp.cn/manual_3_2.html#volist

Thinkphp マニュアルには、これについて非常に明確に記載されています。他に要件がない場合は、キー値を出力するためのほとんどの要件を満たすことができます。しかし、配列が次の形式に変更された場合はどうなるでしょうか:

$multiArr = [
            &#39;aaa&#39; => [
                &#39;a&#39; => [
                    &#39;num&#39; => &#39;1&#39;,
                ],
                &#39;b&#39; => [
                    &#39;num&#39; => &#39;2&#39;,
                ]
            ],
            &#39;bbb&#39; => [
                &#39;c&#39; => [
                    &#39;num&#39; => &#39;3&#39;,
                ],
                &#39;d&#39; => [
                    &#39;num&#39; => &#39;4&#39;,
                ]
            ]
        ];

そしてこのとき、外側のループのキー値と内側のループのキー値はループではなくデータ自体によって決定される場合、処理はどうなるでしょうか?そうですね、そのとき誤解していたのですが、ずっとvolistを2つ使ってループさせてキーの値(データそのもので決まる)を出力したいと思っていたのですが、長い間試してみたところ、やはりそれができないことが分かりました。働かないよ。多くの情報を確認しましたが、多くの情報でこの問題について言及されていないことがわかりました。無数の脳細胞を殺してコードを眺めていると、ふと、foreach でもこのようなループ演算ができるのではないかと思いつき、このラベルを使ってみてはいかがでしょうか?それともこれら 2 つのタグを一緒に使用しますか?突然、それが明らかになりました。したがって、フロントエンド コードを次のように変更します。

 <tr>
        <foreach name="list" item="data" key="i">
            <td>{$i}</td>
            <td>
            <tr>
                <volist name="data" id="vo" key="k">
                    <td>{$key}</td>
                    <td>{$vo.num}</td>
                </volist>
            </tr>
            </td>
        </foreach>
    </tr>

得られる結果は次のとおりです。

aaa
a   1   b   2
bbb
c   3   d   4

は上記の要件を満たしています。要約は次のとおりです。

thinkphp では、volist タグを使用してループ内で複数の配列を出力するときに、デフォルトの代わりにデータによって制御されるキー値を出力したい場合は、foreach を使用できます。 volistタグと組み合わせてキー値をそのまま出力できます。

以上がThinkphp volist 複数ループで配列キー値をそのまま出力の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はbbsmaxで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。