PHP CSV循环遍历相同的列名

时间:2012-07-31 14:35:58

标签: php csv

下面的代码完美无瑕,但它只发布包含main_的第一张图片。我需要它来获取包含单词“main_”的任何列值,从而使我能够发布多个图像。所以如果我有3个或更多main_img_url,循环应该知道这个并相应地添加它们。我下面提到图像处理程序的开始和结束。

以下是CSV示例:

post_title, post_content, main_img_url, main_img_url

这是我的代码:

function app_csv_to_array($file = '', $delimiter = ',') {
    if(!file_exists($file) || !is_readable($file))
        return false;
    $header = NULL;
    $data = array();
    if(false !== $handle = fopen($file, 'r')) {
        while(false !== $row = fgetcsv($handle, 1000, $delimiter)) {

            if($header)
                $data[] = array_combine($header, $row);
            else
                $header = $row;
        }
        fclose($handle);
    }
    return $data;
}


    function process($file) {
        $rows = $this->app_csv_to_array($file);
        foreach($rows as $row) {
            $post['post_title'] = sanitize_text_field($row['post_title']);
            $post['post_content'] = sanitize_text_field($row['post_content']);
            $post['post_status'] = 'publish';
            $post['post_author'] = 658;

        $post_id = wp_insert_post($post);
        //////////////// I want the loop to start here   //////////////////
            foreach($row as $key => $val) {
              if(strstr($key, 'main_')) {
                $tmp = download_url( $file );
                preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $file, $matches);
                $filename = strtolower(basename($matches[0]));
                  } 
            }
//////////////// ends here   //////////////////
        }
    }

1 个答案:

答案 0 :(得分:1)

您的问题出在app_csv_to_array方法内,特别是array_combine

基于documentation array_combine将从两个输入数组创建一个关联数组,其中第一个用于键的值,第二个值用于其值

因为您的密钥是csv文件的标题:

post_title, post_content, main_img_url, main_img_url

最终返回的结果数组只有main_img_url的一个插槽作为其键。

解决此问题的方法是确保csv文件中的标头是唯一的,同时允许strstr($key, 'main_')与您的列内容相匹配。类似的东西:

post_title, post_content, main_img_url1, main_img_url2