如何在PHP中的foreach循环中键入转换变量?

时间:2015-04-13 08:31:59

标签: php foreach

我正在使用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;
}

4 个答案:

答案 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;
   }
}

https://eval.in/312808

修改

如果需要多个元素来输入,请将它们存储在一个数组中(如上所述),然后调用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;
   }
}

https://eval.in/312812

答案 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;
}