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