【问题标题】:Foreach returns only one outputForeach 只返回一个输出
【发布时间】:2014-12-29 13:23:43
【问题描述】:

好的,所以我被困在这里,我知道会有一个简单的解决方案,但我无法弄清楚。所以问题是我有一个函数,如果不存在,它会在数据库中创建列。我让该功能正常工作,但我想在检测列类型(VARCHAR、INT 等)并相应地创建列的功能中添加功能。我试图通过gettype 关键字来完成这项工作。现在,$productData 在数组中,所以我需要应用 foreach 将它们分开,然后我得到值类型,问题是在最后的 foreach 循环中,它只给了我字符串。其中$productData 有 4 个字符串和 1 个整数 ..

$array       = (array) $productData;
$arrayValues = array_values( $array );
$i = 0;

foreach ( $arrayValues as $key => $value ) {
    $types = array( "id-$i" => gettype( $value ) );
    $i++;
}
var_dump($types);

有人可以帮我吗?

谢谢..

【问题讨论】:

  • 一个变量只能有一个值...
  • 我将它存储在数组中。如果您在 foreach 中使用 var_dump,它会正确地为您提供所有输出..
  • 不,不会的。你错误地解释了输出。
  • 是的,我的错。从 fejese 那里得到了正确的。无论如何谢谢..

标签: php mysql arrays foreach


【解决方案1】:

您只需要初始化一次数组,稍后再向其中添加元素:

$array       = (array) $productData;
$arrayValues = array_values( $array );
$i = 0;

$types = array();
foreach ($arrayValues as $key => $value) {
    $types["id-$i"] = gettype($value);
    $i++;
}
var_dump($types);

小心gettype(),因为它会在对象上失败。你需要确保每个$value 都是一个内部类型

更新: gettype() 将为所有对象返回 "object"。因此,这是一种确定变量类型的安全方法。虽然如果你需要对象的类,你需要使用get_class(),以防gettype()返回"object"

【讨论】:

  • 感谢 Fejese,这行得通。我不确定您所说的内部类型是什么意思?
  • 感谢 Fejese 的提醒,我将使用 gettype 作为变量。但我想我很快就会使用get_class 进行进一步的工作。
  • 代码虽然是对的,但为什么这么复杂? $types = array_map('gettype', (array)$productData); 也差不多。
  • @Yoshi,你说得很对,我只是认为指出 OP 实现中的错误有助于他更好地理解代码最初的问题
【解决方案2】:

如果您首先使用 MYSQL 命令选择表定义:SHOW COLUMNS FROM mytable,这将返回包含其定义的列数组

【讨论】:

  • 我在其他地方处理过 MySQL,我只是获取产品中每个条目的类型,以便为它添加新列。
猜你喜欢
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 2021-08-22
  • 2016-06-03
  • 1970-01-01
相关资源
最近更新 更多