0

我有一个 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;

    }

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

4

1 回答 1

1
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 类型。容易失败。

于 2012-05-14T00:27:50.560 回答