我有一个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 类型。容易失败。