PHP - 将由 CSV 制成的二维数组重新格式化为适合 MYSQL 导入的模式

标签 php mysql csv import multidimensional-array

我有一个 CSV 文件要导入到 MYSQL 数据库。 问题是每行都有不同数量的字段。 而且它们的排列相当随意。
然而,它们可以分为几类(文本、图像......等)。

在当前的形式中,它太不规则,无法直接导入数据库,所以我厌倦了使用 PHP 重新格式化它。

简化示例:

$messy = array( 
         [0]  => array("text1","text2" ),
         [1]  => array("img1.jpg" ),
         [2]  => array("text1","img1.jpg","img2.jpg"),
         [3]  => array("img1.jpg","text1","text2"),
            ...
         [1000]  => array("text2","img1.jpg","img2.jpg","text1")
         ); 

我希望新数组匹配以下模式

array( 
         [0]  =>array(TEXT,TEXT,IMG,IMG),
         [1]  =>array(TEXT,TEXT,IMG,IMG),

如果数据不足,则剩余值=0;

         [0]  =>array("text1","text2",0,0),
         [1]  =>array(0,0,"img1.jpg",0),

我尝试创建新数组并将“文本”字段移动到开头,如下所示:

$ordered=array();            
$i=0;

    foreach($messy as $row){

        foreach($row as $item){
            if (strlen(strstr($item,"text"))>0) {

                    if(($key = array_search($item, $row)) !== false){                   
                        unset($row[$key]);                      
                    }

                array_unshift($row,$item);

            }

        }


        $ordered[$i++]=$row;

    }

但是它不会重新格式化,只是重新排序。

最佳答案

function item_is_img($item) {
    $ext = pathinfo( $item, PATHINFO_EXTENSION )
    switch ( strtolower($ext) ) {
        case 'jpg':
        case 'jpeg':
        case 'png':
            return true;
            break;               
        default:
            return false;
    }        
}

function reorder( $inputArray) {
    $resultArray = array();
    foreach ($inputArray as $line) {
        $t = 0;
        $i = 2;
        $result = array(0,0,0,0);
        foreach ($line as $item) {
            if ( item_is_img($item) )
                $result[$i++] = $item;
            else
                $result[$t++] = $item;
        }
        $resultArray[] = $result;
    }
    return $resultArray;
}

完全未经测试。假设最多有 2 个 TEXT 类型和 2 个 IMG 类型。容易失败。

关于PHP - 将由 CSV 制成的二维数组重新格式化为适合 MYSQL 导入的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10576203/

相关文章:

c# - SubSonic:MySql、Float 和 Single->Decimal 问题

Java 8,随时间间隔的复杂分组

csv - 有没有办法在 Paraview 中自动加载 csv 文件?

javascript - 使用 jsonp 和 ajax HTML

php - 如何仅在超过特定日期时才启用 mysql 条件

mysql - 查找所有 MySQL 存储过程调用?

python - 将 Python 字典写入 CSV,其中键 = 列,值 = 行

python - 如何避免 python 将大数转换为科学记数法?

php - 我怎样才能制作一个按钮链接,就像在 Facebook 中一样?

php - 设置从 EBS 共享加载文件的超时