为什么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',)

+2

删除在的foreach行最后的分号,然后再试一次。我不确定$字段是如何在此之后定义的。 – jh1711

+2

即使在循环完成后,显然$ key和$ field仍然保留。忽略我评论的第二句话。 Kamran的答案解释了半问题。 – jh1711

+1

如果你不打算使用'$ key',不要在foreach循环中声明它。你的正则表达式模式可以/应该是'/ desc \ d + _(name | text) – mickmackusa

您使用;在foreach循环结束时,循环体首先结束;所以请删除它。 代码应该是这样的的foreach

foreach($result as $key => $field) 
{ 
    $fields[] = $field['Field']; 
} 

Demo