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

藏色散人
リリース: 2020-06-05 14:27:00
転載
3739 人が閲覧しました

以下は、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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート