为什么foreach在数组中只创建一个值?
问题描述:
我为PrestaShop 1.6创建了一个模块。我无法在表格中获取此模块创建的列。我不知道什么可能是错的。 '$ fields'只占用最后一列。 '$ result'就可以了。就好像PHP没有创建索引一样。为什么foreach在数组中只创建一个值?
public function getNewDescriptionFields()
{
$db = Db::getInstance();
if(!$db)
return false;
$result = $db->ExecuteS('SHOW COLUMNS FROM '. _DB_PREFIX_ .'product_lang');
if(!$result)
return false;
$fields = array();
foreach($result as $key => $field);
{
$fields[] = $field['Field'];
}
file_put_contents('/home/www/test4', var_export($fields, true));
file_put_contents('/home/www/test3', var_export($result, true));
$fields = preg_grep("/desc([0-9]?[0-9])_(name|text)/", $fields);
return $fields;
}
从TEST3(部分):
19 =>
array (
'Field' => 'desc4_text',
'Type' => 'text',
'Null' => 'YES',
'Key' => '',
'Default' => NULL,
'Extra' => '',
),
20 =>
array (
'Field' => 'desc5_name',
'Type' => 'varchar(64)',
'Null' => 'YES',
'Key' => '',
'Default' => NULL,
'Extra' => '',
),
21 =>
array (
'Field' => 'desc5_text',
'Type' => 'text',
'Null' => 'YES',
'Key' => '',
'Default' => NULL,
'Extra' => '',
),
22 =>
array (
'Field' => 'desc6_name',
'Type' => 'varchar(64)',
'Null' => 'YES',
'Key' => '',
'Default' => NULL,
'Extra' => '',
),
23 =>
array (
'Field' => 'desc6_text',
'Type' => 'text',
'Null' => 'YES',
'Key' => '',
'Default' => NULL,
'Extra' => '',
从TEST3: array (0 => 'desc6_text',)
答
您使用;在foreach循环结束时,循环体首先结束;所以请删除它。 代码应该是这样的的foreach
foreach($result as $key => $field)
{
$fields[] = $field['Field'];
}
删除在的foreach行最后的分号,然后再试一次。我不确定$字段是如何在此之后定义的。 – jh1711
即使在循环完成后,显然$ key和$ field仍然保留。忽略我评论的第二句话。 Kamran的答案解释了半问题。 – jh1711
如果你不打算使用'$ key',不要在foreach循环中声明它。你的正则表达式模式可以/应该是'/ desc \ d + _(name | text) – mickmackusa