我想将变量(这些变量的值)放入数组中。我有类似的变量名称,所以我尝试找到一个基于循环的解决方案,它提供相同的输出:
$str1 = "one";
$str2 = "two";
$str3 = "three";
$arr = array($str1, $str2, $str3);
foreach ($arr as $key => $value){
echo "[", $key, "] = ", $value, "<br/>";
}
对于基于循环的解决方案,我尝试了这种方式,但它不允许将值插入到数组中:
$str1 = "one";
$str2 = "two";
$str3 = "three";
function arrayDefine($varName, $max) {
for ($i = 1; $i <= $max; ++$i){
echo "$", $varName, $i;
if ($i < $max){
echo ", ";
}
}
}
$arrItems = arrayDefine(str, 3);
$arr = array($arrItems);
foreach ($arr as $key => $value){
echo "[", $key, "] = ", $value, "<br/>";
}
第一个代码块的输出是:
[0] = one
[1] = two
[2] = three
但第二个显示:
$str1, $str2, $str3[0] =
为了获得与第一个(非基于循环的)解决方案相同的结果,我应该更改/使用什么?
答案 0 :(得分:3)
您需要了解的第一件事是将一些信息打印到输出(例如echo
)和为变量赋值。
您的函数只是将变量名称输出到输出。但是,这些是字符串。程序运行后,String不等于一段代码。这是任何编程的基础知识,除非变量对您完全清楚,否则不得尝试做任何事情。
$GLOBALS
现在是一个解决方案。由于您的变量是全局,您可以通过php的$GLOBALS
数组访问它们。这看起来像这样:
$str1 = "a";
$str2 = "b";
$str3 = "c";
function createArray($name, $count) {
$return_array = array();
for($i=0; $i<$count; $i++) {
$return_array[$name.($i+1)] = $GLOBALS[$name.($i+1)];
}
return $return_array;
}
print_r(createArray("str", 3));
一般来说,你所做的是荒谬的。如果您不想存储一些数据以便可以访问所有数据,请从数组开始:
array("a", "b", "c");
or
array("str1"=>"a", ...);
eval()
此外,许多初学者倾向于喜欢“ evil ”功能。你也可以这样做。 eval()
将字符串转换为一段代码。但是,它总是一个糟糕的解决方案,当我学习更多关于编程的知识时,我总是学到更好的解决方案。但是,你从一开始就无法了解所有内容,所以这里有一种如何生成最危险和最不安全的代码的方法:
function createArray($ name,$ count){ $ return_array = array(); for($ i = 0; $ i
这非常危险,会造成麻烦。
$$
语法我认为$$
方法proposed by ManiacTwister是最好的。您甚至可以将复杂的字符串转换为变量:
echo ${"static_text" . $string};
然而,再次,为什么不使用数组?此功能应用于调试目的。
但是, variable scopes 可能会造成混淆,请参阅示例:
$x = 666;
function printvar($name) {
global $$name; //Get the variable from global scope t the function scope
echo $$name; //if $name = "x" this evaluates into echo $x
echo "\n"; //New line
}
printvar("x"); //Prints 666
function aFunction() {
$x = 13; //This $x only exists betvween {} and has nothing to do with global $x = 666
printvar("x"); //Still prints 666!
}
答案 1 :(得分:2)
即使不是最佳做法,也应该有效:
$str1 = "one";
$str2 = "two";
$str3 = "three";
function arrayDefine($varName, $max) {
$items = array();
for ($i = 1; $i <= $max; ++$i){
$var = $varName.$i;
global $$var;
$items[$i] = $$var;
}
return $items;
}
$arr= arrayDefine('str', 3);
foreach ($arr as $key => $value){
echo "[", $key, "] = ", $value, "<br/>";
}
答案 2 :(得分:1)
function arrayFunction()
{
$str1 = "one";
$str2 = "two";
$str3 = "three";
$array = array($str1, $str2, $str3);
foreach ($array as $key=>$value) {
echo "[", $key, "] = ", $value, "<br/>";
}
}
arrayFunction();
答案 3 :(得分:0)
我认为这会奏效:
$str1 = 'one';
$str2 = 'two';
$str2 = 'three';
for($i=1;$i<100;$i++){
$varName = 'str' . $i;
$returnArray[$varName] = $$varName;
}
但是,如果你正在创建一个函数,请记住它不能访问$ str1,$ str2等...因为它们在GLOBAL范围内,而不是函数范围(并且与大多数语言不同? !(至少我知道的))除非你说“全球”,否则GLOBAL在函数中是不可访问的。
所以你需要使用Tomas'代码。