Я экспериментирую с загрузкой CSV в PHP.
У меня есть CSV-файл с 3 столбцами, простые значения.
Мне удалось выполнить цикл по каждой строке и вывести каждое значение, но мне нужно получить данные, условно основанные на уникальных значениях и определенной позиции в строке.
Например, для каждого уникального значения в столбце a мне нужно сгенерировать массив объектов данных на основе значения столбца b, используя столбец c в качестве условия для одного из значений.
Мой CSV:
1 123 0
1 124 0
1 125 0
1 126 0
1 127 0
1 128 0
1 129 0
1 130 1
1 131 1
1 132 1
1 133 1
1 134 1
1 135 1
2 123 0
2 124 0
2 125 0
2 126 1
2 127 1
2 128 1
2 129 1
2 130 1
2 131 1
2 132 1
2 133 1
2 134 1
2 135 1
3 256 0
3 456 0
3 321 0
3 489 0
3 965 0
3 652 1
3 741 1
Код, который я использую для опроса:
<?php
$stack = array();
if (($han = fopen("sample.csv", "r")) !== FALSE) {
while (($data = fgetcsv($han, 50, ",")) !== FALSE) {
array_push($stack, $data); //push each arr1 into arr2(stack)
}
fclose($han);
}
sort($stack); //sort arr2
$newarray = array();
foreach($stack as $val){
$lineid = $val[0];
$segmentid = $val[1];
$action = $val[2];
$newarray[$lineid][$segmentid] = $action;
}
print_r($newarray);
?>
выход
Array
(
[1] => Array
(
[123] => 0
[124] => 0
[125] => 0
[126] => 0
[127] => 0
[128] => 0
[129] => 0
[130] => 1
[131] => 1
[132] => 1
[133] => 1
[134] => 1
[135] => 1
)
[2] => Array
(
[123] => 0
[124] => 0
[125] => 0
[126] => 1
[127] => 1
[128] => 1
[129] => 1
[130] => 1
[131] => 1
[132] => 1
[133] => 1
[134] => 1
[135] => 1
)
[3] => Array
(
[256] => 0
[321] => 0
[456] => 0
[489] => 0
[652] => 1
[741] => 1
[965] => 0
)
)
psuedocode для того, чего я хочу достичь
for each unique column_a value {
grab all column_b's within this unique column_a and for each
$column_b_object = new stdClass;
$column_b_object->id = $column_b_value;
if (column_c_value = "0") {
$column_b_object->zero = "no";
}
$column_bs[] = $column_b_object;
execute something, reset, move to next unique column_a
}
РЕДАКТИРОВАТЬ РЕШЕНИЕ:
<?php
$stack = array();
if (($han = fopen("sample.csv", "r")) !== FALSE) {
while (($data = fgetcsv($han, 50, ",")) !== FALSE) {
array_push($stack, $data); //push each arr1 into arr2(stack)
}
fclose($han);
}
sort($stack); //sort arr2
$newarray = array();
foreach($stack as $val){
$lineid = $val[0]; $segmentid = $val[1]; $action = $val[2];
$newarray[$lineid][$segmentid] = $action;
}
foreach($newarray as $value) {
foreach($value as $key => $value2){
echo $key . " | " . $value2 . "<br />";
}
echo "STOP";
}
?>
Надеюсь, что это имеет смысл.
Спасибо