0

わかりました、だから私はこの配列を持っています:

 $choices = array($_POST['choices']);

var_dump() を使用すると、次のように出力されます。

array(1) { [0]=> string(5) "apple,pear,banana" }

私が必要とするのは、それらの値が変数になることと、文字列として値を追加することです。したがって、出力を次のようにする必要があります。

 $apple = "apple";
 $pear = "pear";
 $banana = "banana";

配列の値は変更される可能性があるため、その配列の内容に応じて変数を作成する必要があります。

私はすべての助けをいただければ幸いです。乾杯

マーク

4

4 に答える 4

4

どうですか

$choices = explode(',', $_POST['choices']);
foreach ($choices as $choice){
    $$choice = $choice;
}
于 2012-07-17T05:38:35.513 に答える
1

これは非常に悪い考えであるという他のすべての回答に同意する必要がありますが、既存の回答はそれぞれ、それを達成するためにやや遠回りの方法を使用しています。

PHP は、変数を配列から現​​在のスコープに抽出するための関数extractを提供します。この場合、次のように使用できます (explode と array_combine を使用して、最初に入力を連想配列に変換します)。

$choices = $_POST['choices'] ?: ""; // The ?: "" makes this safe even if there's no input
$choiceArr = explode(',', $choices); // Break the string down to a simple array
$choiceAssoc = array_combine($choiceArr, $choiceArr); // Then convert that to an associative array, with the keys being the same as the values
extract($choiceAssoc, EXTR_SKIP); // Extract the variables to the current scope - using EXTR_SKIP tells the function *not* to overwrite any variables that already exist, as a security measure
echo $banana; // You now have direct access to those variables

これが不適切なアプローチである理由の詳細については、廃止されたregister_globals設定に関する説明を参照してください。要するに、安全でないコードを書くのがはるかに簡単になります。

于 2012-07-17T06:22:48.073 に答える
1
$str = "apple,pear,pineapple";
$strArr = explode(',' , $str);
foreach ($strArr as $val) {
    $$val = $val;
}
var_dump($apple);

これはあなたの要件を満たすでしょう。ただし、ここで問題が発生します。変数がいくつあり、それらが何であるかを事前に定義できなかったため、それらを正しく使用するのは困難です。$VAR を使用する前に "isset($VAR)" をテストすることが唯一の安全な方法のようです。

ソース文字列を 1 つの配列に分割し、特定の配列の要素を操作するだけのほうがよいでしょう。

于 2012-07-17T05:59:20.643 に答える
0

多くの場合、他の言語では「分割」と呼ばれますが、PHP では、explode を使用する必要があります。

編集:実際、あなたがやりたいことは...危険に聞こえます。それは可能ですが (PHP の古い「機能」でした)、強くお勧めしません。代わりに、それらを分解して、それらの値を連想配列のキーにすることをお勧めします。

$choices_assoc = explode(',', $_POST['choices']);
foreach ($choices as $choice) {
    $choices_assoc[$choice] = $choice;
}
于 2012-07-17T05:37:37.587 に答える