如何在 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;
   }
}

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

这应该适合你:

(这里我用按键然后调用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;
}