如何在 PHP 中的 foreach 循环中键入强制转换变量?
How to type cast variables inside a foreach loop in PHP?
我正在使用 foreach
循环遍历数组:
$attributes = array( 'drink', 'price', 'amount' );
foreach ( $attributes as $key ) {
$info[$key] = $key;
}
如何在每次循环 运行 时以不同的方式键入我的 $key
变量?例如,我需要的饮料类型为 string
,价格为 float
,金额为 int
.
请注意,这是我的代码的简化示例。在循环 运行 之前键入键不适合我的情况。
我尝试了以下方法,但似乎没有用:
$attributes = array( 'drink' => 'string', 'price' => 'float', 'amount' => 'int' );
foreach ( $attributes as $key => $value ) {
$info[$key] = ($value) $key;
}
使用关联数组并将键用作类型转换。例如
$attributes = array("string" => array("drink"),
"float" => array("price"),
"int" => array("amount"));
$array = array();
foreach($attributes as $cast => $val) {
switch($cast) {
case 'int' :
$array[] = (int) $val;
break;
case 'float' :
$array[] = (float) $val;
break;
case 'string' :
default :
$array[] = (string) $val;
break;
}
}
编辑
如果有多个元素需要类型转换,将它们存储在一个数组中(如上),然后调用array_map
。例如:
$attributes = array("string" => array("drink"),
"float" => array("price"),
"int" => array("amount"));
$array = array();
foreach($attributes as $cast => $val) {
switch($cast) {
case 'int' :
$array[] = array_map("intval",$val);
break;
case 'float' :
$array[] = array_map("floatval",$val);
break;
case 'string' :
default :
$array[] = array_map("strval",$val);
break;
}
}
这应该适合你:
(这里我用按键然后调用strval()
, floatval()
or intval()
)
$attributes = array("str" => 'drink',"float"=> "10.5","int"=> "10" );
foreach ( $attributes as $k => $key ) {
$k.="val";
$info[$key] = $k($key);
}
var_dump($info);
输出:
array(3) {
["drink"]=>
string(5) "drink"
["10.5"]=>
float(10.5)
[10]=>
int(10)
}
如果$attributes
中的顺序不变你可以尝试:
$attributes = array( 'drink', 'price', 'amount' );
foreach ( $attributes as list($drink, $price, $amount) ) {
$info['drink'] = $drink;
$info['price'] = (float) $price;
$info['amount'] = (int) $amount;
}
您也可以使用 settype()
函数,此处根据您的示例进行了调整:
$attributes = array( 'drink' => 'string', 'price' => 'float', 'amount' => 'int' );
foreach ( $attributes as $key => $value ) {
settype($key, $value);
$info[$key] = $key;
}
我正在使用 foreach
循环遍历数组:
$attributes = array( 'drink', 'price', 'amount' );
foreach ( $attributes as $key ) {
$info[$key] = $key;
}
如何在每次循环 运行 时以不同的方式键入我的 $key
变量?例如,我需要的饮料类型为 string
,价格为 float
,金额为 int
.
请注意,这是我的代码的简化示例。在循环 运行 之前键入键不适合我的情况。
我尝试了以下方法,但似乎没有用:
$attributes = array( 'drink' => 'string', 'price' => 'float', 'amount' => 'int' );
foreach ( $attributes as $key => $value ) {
$info[$key] = ($value) $key;
}
使用关联数组并将键用作类型转换。例如
$attributes = array("string" => array("drink"),
"float" => array("price"),
"int" => array("amount"));
$array = array();
foreach($attributes as $cast => $val) {
switch($cast) {
case 'int' :
$array[] = (int) $val;
break;
case 'float' :
$array[] = (float) $val;
break;
case 'string' :
default :
$array[] = (string) $val;
break;
}
}
编辑
如果有多个元素需要类型转换,将它们存储在一个数组中(如上),然后调用array_map
。例如:
$attributes = array("string" => array("drink"),
"float" => array("price"),
"int" => array("amount"));
$array = array();
foreach($attributes as $cast => $val) {
switch($cast) {
case 'int' :
$array[] = array_map("intval",$val);
break;
case 'float' :
$array[] = array_map("floatval",$val);
break;
case 'string' :
default :
$array[] = array_map("strval",$val);
break;
}
}
这应该适合你:
(这里我用按键然后调用strval()
, floatval()
or intval()
)
$attributes = array("str" => 'drink',"float"=> "10.5","int"=> "10" );
foreach ( $attributes as $k => $key ) {
$k.="val";
$info[$key] = $k($key);
}
var_dump($info);
输出:
array(3) {
["drink"]=>
string(5) "drink"
["10.5"]=>
float(10.5)
[10]=>
int(10)
}
如果$attributes
中的顺序不变你可以尝试:
$attributes = array( 'drink', 'price', 'amount' );
foreach ( $attributes as list($drink, $price, $amount) ) {
$info['drink'] = $drink;
$info['price'] = (float) $price;
$info['amount'] = (int) $amount;
}
您也可以使用 settype()
函数,此处根据您的示例进行了调整:
$attributes = array( 'drink' => 'string', 'price' => 'float', 'amount' => 'int' );
foreach ( $attributes as $key => $value ) {
settype($key, $value);
$info[$key] = $key;
}