私はphpが1つの大きな多次元配列に変換する必要があるcsvファイルのリストを持っています。たった2つのphpでテストすると、2番目の変換を行うときに最大実行時間を超えます。
csv から数値多次元配列への最初の変換
2番目の変換は、数値多次元配列から文字列および数値多次元配列への変換であり、phpがエラーを生成する場所です。
私のコードは次のとおりです。
function parse($data) {
$i = 0;
while (isset($data[$i])) {
$row = 0;
while (isset($data[$i][$row])) {
switch ($row) {
case 0:
//General Item details
$fOv = 0;
while (isset($data[$i][$row][$fOv])) {
$array['Item'][$i][$data[$i][row][$fOv]] = $data[$i][$row + 1][$fOv];
$fOv++; // THIS IS THE PLACE OF THE ERROR
}
break;
case 2:
//General Transaction details
$fOv = 0;
while (isset($data[$i][$row][$fOv])) {
$array['Transaction'][$i][$data[$i][$row][$fOv]] = $data[$i][$row + 1][$fOv];
$fOv++;
}
break;
case 4:
//Buyer details
$fOv = 0;
while (isset($data[$i][$row][$fOv])) {
$array['Transaction']['Buyer'][$i][$data[$i][$row][$fOv]] = $data[$i][$row + 1][$fOv];
$fOv++;
}
break;
case 6:
//Shipping details
$fOv = 0;
while (isset($data[$i][$row][$fOv])) {
$array['Transaction']['Shipping'][$i][$data[$i][$row][$fOv]] = $data[$i][$row + 1][$fOv];
$fOv++;
}
break;
case 8:
//Status details
$fOv = 0;
while (isset($data[$i][$row][$fOv])) {
$array['Transaction']['Status'][$i][$data[$i][$row][$fOv]] = $data[$i][$row + 1][$fOv];
$fOv++;
}
break;
}
$row + 2;
}
$i++;
}
return $array;
}
数値配列は次のようになります。
array (
0 => array (
0 => array (
0 => 'field 1', 1 => 'field 2', 2 => 'field 3' //continues to field 17
)
1 => array (
0 => 'value 1', 1 => 'value 2', 2 => 'value 3' //continues to value 17
//these values are for the fields in array[0][0]
)
2 => array ( //same as array[0][0] )
3 => array ( //same as array[0][1], values for array[0][2] )
4 => array ( //same as array[0][0] )
5 => array ( //same as array[0][1], values for array[0][4] )
6 => array ( //same as array[0][0] )
7 => array ( //same as array[0][1], values for array[0][6] )
8 => array ( //same as array[0][0] )
9 => array ( //same as array[0][1], values for array[0][8] )
)
1 => array (
//same structure as array[0], different details
)
)
文字列と数値配列に対して取得しようとしているもの:
array (
0 => array (
'Item' => array (
0 => array (
'field 1' => 'value 1'
'field 2' => 'value 2'
//continues to field 17
)
)
'Transaction' => array (
0 => array (
'field n' => 'value n' //repeated until field 17
'Buyer' => array (
//same as above in array[0]['Item'][0]
)
'Shipping' => array (
//same as above in array[0]['Item'][0]
)
'Status' => array (
//same as above in array[0]['Item'][0]
)
)
)
)
1 => array (
//same structure as array[0], different values
)
)
事前に感謝します。
編集: 最大実行時間を増やしたくありません。スクリプトは、最初に csv ファイルにデータを保存する作業スクリプトと同じように、30 秒未満で完了する必要があります。