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


PHP - Re-format 2 dimensional array made from CSV to the pattern suitable for MYSQL import

我有一个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 种文本类型和 2 种 IMG 类型。容易失败。