7

次のような連想配列を使用して、いくつかのパラメーターを渡す必要があります。

$blockGroup['name=products type=complete']

いくつかのテストを行うと、それが機能することがわかりましたが、それは悪い習慣ですか? バグや予期しない動作を生成する可能性はありますか?

ご提案ありがとうございます。

編集1

ビューの実装でこの配列を使用しています。完全な構造は次のとおりです。

$blockGroup['name=products type=complete'][] =
    array(
        'name'  => 'GeForce',
        'value' => '99.99'
    );
4

7 に答える 7

13

いいえ、ちがいます。プログラミングにおけるスペース記号には特別な意味はありません。引用符で囲まれて文字列を形成するシンボルは、連想配列キーとして使用できます。

実際、連想配列にそのようなキーを使用すると、コードが読みやすくなり、コードを変更しやすくなることがよくあります。

$scores = array("John Doe" => 100, "Ivan Ivanovich" => 75.3);

私が見ているのは、配列キーを式として使用しようとしているということです。これは本当に悪い習慣です。物事は、彼らが意味するもののために意味されています。連想キーは連想キーとして使用します。

于 2013-04-24T02:09:37.020 に答える
3

それは機能し、悪い習慣ではありません。空白は、インデックス文字列の通常の文字です。これで問題ありません。

多くのプログラミング状況では、配列で使用しているインデックスが動的に作成されるため、これは必須です。インデックスは、バイナリ文字列にすることもできます。この例、典型的な状況を確認してください。ファイルから重複する行を削除し、すべての行を 1 回だけ出力します。

file.txt

hello world. 
foo bar
hello world
123

example.php

$printed = array(); 
foreach(file('file.txt') as $line) {
    if(isset($printed[$line])) {
        continue; // skip the line
    }

    echo $line;
    $printed[$line] = true; // line will contain spaces
}
于 2013-04-24T02:07:27.783 に答える
2

キーでスペースが問題になるとは思いませんが、等号を使用するのは厄介だと思います。コード例に基づいて、次のように配列で 3 次元を使用しない理由がわかりません。


$blockGroup['products']['complete'][] =
    array(
        'name' => 'GeForce',
        'value' => '99.99'
    );

私はあなたの状況を誤解しているかもしれませんが、それは私にはより論理的に思えます.

于 2013-04-24T02:29:41.327 に答える
1

これは有効な構文ですが、目的を達成するためのより良い方法かもしれません。

配列には、Integer、FLoating、Null、Bool、および String キーを含めることができます。

文字列の場合、PHP は文字列を内部的に一連のバイトとして表現するため、私の知る限り、キーにスペースや特殊文字を使用しても脆弱性が生じる可能性はありません。

ただし、私の意見では、コードが読みにくくなり、キーを間違って入力することで間違いが発生しやすくなり、入力するはずだったことがわかるまでに数え切れないほどの時間が費やされます。

$myKey['name=guitar price=200.00']

それ以外の:

$myKey['name=gutiar price=200.00']

PHP のマニュアル ページには、これが悪い習慣である理由が詳しく説明されています。

将来のある時点で、PHP チームは別の定数またはキーワードを追加したい場合や、他のコードの定数が干渉する可能性があります。たとえば、empty と default という単語は予約済みのキーワードであるため、このように使用することは既に間違っています。

http://php.net/manual/en/language.types.array.php

于 2013-04-24T02:09:40.897 に答える
1

元の質問に答えると、PHP の関連付けられた配列はキーを値にマップします。この場合、使用しているキーは文字列です。この場合、PHP が気にするのはそれだけであり、必ずしも文字列の内容 (つまり、スペースがある場合とない場合があります) ではありません。私がこれを言うのは、それがその言語で合法であるかどうかについて確信が持てないようだったからです (それが悪い習慣であったかどうかだけではありません)。

それが悪い習慣であるかどうかについては、私が知っているものではありません。そのようなキーが保存したい値に自然にマップされる場合、それは問題ないはずです。

于 2013-04-24T02:07:40.070 に答える
1

はい、それは悪い習慣ですが、うまくいきます。あなたが達成しようとしていることは何でも、別の方法で行うことができます。多次元配列を提案できますか? それともキーと値ですか?

このようなことが今後の頭痛の種になる可能性があると思います。IMOのスペルミスの余地が増えました。さらに、見た目があまり良くありません。

私は具体的にあなたの例を参照していることに注意してください。これらの行に沿った何かは問題ありません:

array('toaster oven' => 100, 'heater' => 50);
于 2013-04-24T02:09:05.670 に答える
1

ベスト プラクティスに関しては、読みやすさと実用性が主な関心事です。配列キーのスペースがコードを読みやすくする場合は、自由に使用してください。この投稿全体を配列キーとして使用できますが、実用的ではありません。

配列キーを変数名として使用して変数変数を作成する場合は、スペースを使用することはお勧めしません。使用する場合も同様ですextract()。これは、ユーザー入力など、制御できないデータで使用すると危険な場合があるため、注意してください。

変数変数を作成する場合は、スペースを引き続き使用できます。事前にスペースをアンダースコアに変換してください。

変数変数のソース: https://www.php.net/manual/en/language.variables.variable.php

ソースextract(): https://www.php.net/manual/en/function.extract.php

于 2020-06-10T16:31:50.837 に答える