我正在使用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;
}
答案 0 :(得分:3)
这应该适合你:
(此处我使用密钥然后调用strval()
,floatval()
或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)
}
答案 1 :(得分:1)
使用assoc数组并使用键作为类型转换。例如
$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;
}
}
答案 2 :(得分:1)
您还可以使用settype()
功能,此处适用于您的示例:
$attributes = array( 'drink' => 'string', 'price' => 'float', 'amount' => 'int' );
foreach ( $attributes as $key => $value ) {
settype($key, $value);
$info[$key] = $key;
}
答案 3 :(得分:0)
如果$attributes
中的订单不变,您可以尝试:
$attributes = array( 'drink', 'price', 'amount' );
foreach ( $attributes as list($drink, $price, $amount) ) {
$info['drink'] = $drink;
$info['price'] = (float) $price;
$info['amount'] = (int) $amount;
}