将返回的行用作php变量名,并从CSV分配值

时间:2014-03-05 14:47:21

标签: php mysql loops csv multiple-columns

我有一个mysql SELECT查询,它返回以下内容:

$getDbVars = "SELECT `var_code` FROM `campaign_variables`";

$name
$videoURL
$leadLogo
$brand
$competitor

我还有一个CSV,其列与上面的相同。当然,CSV每列保留数百行。

andres,http://somewhere.com/vid1.mp4,http://somewhere.com/logo1.png,brand1,andres-competitor
allan,http://somewhere.com/vid5.mp4,http://somewhere.com/logo5.png,brand5,allan-competitor
alexander,http://somewhere.com/vid7.mp4,http://somewhere.com/logo7.png,alexander-competitor

首先,我需要使用sql查询返回的任何变量名称。

然后,我需要能够遍历CSV,并且每次都将值分配给这些变量。因此,例如,在循环的第一次扫描中:

$name = 'andres';
$videoURL = 'http://somewhere.com/vid1.mp4';
$leadLogo = 'http://somewhere.com/logo1.png';
$brand = 'brand1';
$competitor = 'andres-competitor';

等等,对于CSV的每一行。

如果上述内容没有多大意义,请告诉我。我必须这样做的原因是因为有些情况下相同的查询将返回不同数量的行。因此,会有不同的“变量名称”。好的是,CSV将始终具有与查询返回的行数相同的列数。

1 个答案:

答案 0 :(得分:0)

我认为实现这一目标的最佳方式是数组:

$keys = array("name", "videoURL", "leadLogo", "brand", "competitor");
$csv = $your_csv_as_array_data;

$data = array();
foreach($csv as $row) {
    $temp = array();
    for($i = 0; $i < count($keys); $i++) {
        $temp[$keys[$i]] = $row[$i];
    }
    $data[] = $temp;
}

这将为您提供以下数组:

array (
    [0] => array(
        "name" => "...",
        "videoURL" => "...",
        "leadLogo" => "...",
        "brand" => "...",
        "competitor" => "..."
    ),
    [1] => array(
        "name" => "...",
        "videoURL" => "...",
        "leadLogo" => "...",
        "brand" => "...",
        "competitor" => "..."
    ),
    [2] => array(
        "name" => "...",
        "videoURL" => "...",
        "leadLogo" => "...",
        "brand" => "...",
        "competitor" => "..."
    )
    .
    .
    .
)