Разберите CSV-файл на столбцы с помощью PHP

#php #csv #parsing

Вопрос:

Я не уверен, как бы я добавил столбцы к информации, которая у меня есть в моем файле CSV. Три столбца, которые я хотел бы иметь, — это номер мобильного телефона, Название оператора и Статус действия.

index.php:

 <?php

if (($open = fopen("Book1.csv", "r")) !== FALSE)
{

while (($data = fgetcsv($open, 1000, ",")) !== FALSE)
{       
$array[] = $data;
}

fclose($open);
}
echo "<pre>";
//To display array data
var_dump($array);
echo "</pre>";
 

Моя информация в настоящее время отображается, как показано в следующем коде:

 array(6) { [0]=> array(3) {
                [0]=> string(11) "0744395****"
                [1]=> string(9) " Vodafone"
                [2]=> string(6) " Valid"
            }
            [1]=>    array(3) {
                [0]=> string(11) "0744395****"
                [1]=> string(3) " EE"
                [2]=> string(6) " Valid"
            }
            [2]=> array(3) {
                [0]=> string(11) "0744395****"
                [1]=> string(6) " Three"
                [2]=> string(6) " Valid"
            }
            [3]=> array(3) {
                [0]=> string(11) "0744395****"
                [1]=> string(9) " Vodafone"
                [2]=> string(6) " Valid"
            }
            [4]=> array(3) {
                [0]=> string(11) "0744395****"
                [1]=> string(13) " Tesco Mobile"
                [2]=> string(10) " Not Valid"
            }
            [5]=> array(3) {
                [0]=> string(11) "0744395****"
                [1]=> string(3) " EE"
                [2]=> string(6) " Valid"
            } 
}
 

Я хотел бы, чтобы информация была размещена в столбцах, как показано ниже (онлайн-пример, который я нашел).:

 [REPTILE] => Array(
        [0] => stdClass Object(
                [animal] => crocodile
                [type] => REPTILE
                [number] => 4
            )
    )

[BIRD] => Array(
        [0] => stdClass Object(
                [animal] => duck
                [type] => BIRD
                [number] => 2
            )
    )

[MAMMAL] => Array (
        [0] => stdClass Object(
                [animal] => koala
                [type] => MAMMAL
                [number] => 4
            )
        [1] => stdClass Object(
                [animal] => lion
                [type] => MAMMAL
                [number] => 5
            )
    )

[FISH] => Array
    (
        [0] => stdClass Object(
                [animal] => áéíóú
                [type] => FISH
                [number] => 3
            )
    )
 

Вот как моя информация хранится в файле CSV:

 0744395****, Vodafone, Valid
0744395****, EE, Valid
0744395****, Three, Valid
0744395****, Vodafone, Valid
0744395****, Tesco Mobile, Not Valid
0744395****, EE, Valid
 

Комментарии:

1. Отлично, но как вы собираетесь решить, какие reptiles из них или birds или fish или …. И вообще, когда мобильные телефоны так классифицировались??? PHP, как и все другие языки программирования, не дотягивает до правильной магии, ИЛИ это я неправильно понял здесь

2. О, я понимаю, это был просто плохой пример. Если вы хотите, чтобы мы поняли ваши требования, потратьте немного времени на отображение массива «ЧТО я ХОЧУ» , используя данные из массива «С ЧЕГО я НАЧАЛ» , и, возможно, все это будет иметь смысл

3. Животное, тип и номер-это та часть, которую я надеюсь получить аналогично для номера мобильного телефона, имени оператора и статуса действия. Я просто использовал этот онлайн-код в качестве примера того, как я хотел бы, чтобы мой код был структурирован.

4. Моя вина. Может быть, это было написано или объяснено не так хорошо, как я надеялся.

5. Вы хотите сгруппировать записи для каждого оператора мобильной связи? Как уже отмечалось @Riggs, пожалуйста, отредактируйте вопрос, чтобы показать массив «ЧТО я ХОЧУ», используя данные из массива «С ЧЕГО я НАЧАЛ».

Ответ №1:

 $newArray = [];

if (($fh = fopen("Book1.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($fh, 1000, ",")) !== FALSE) {
        $o = new stdClass;
        
        $o->MobileNumber    = trim($data[0]);
        $o->Carrier         = trim($data[1]);
        $o->ValidityStatus  = trim($data[2]);
        $newArray[$o->Carrier][] = $o;
    }
}
 

Следует создать массив носителей, каждый из которых содержит массив объектов с номером телефона и статусами внутри

Комментарии:

1. Это в основном то, что предлагает ваш пример «ЧЕГО я ХОЧУ», так что вы имели в виду

2. Путь в онлайн-примере имеет [животное] => коала [тип] = > МЛЕКОПИТАЮЩЕЕ [номер] =>>> 4 Мне нужен [Номер мобильного телефона] =>>>> 07738****** [Перевозчик] = > > > > > > EE [Статус действия] = > > > > > Действителен. Мне нужно, чтобы это отображалось в этой структуре для каждого вывода данных

3. Да, это вы получите из этого кода, но все номера EE будут находиться в массиве под названием EE, как у вашего FISH и т. Д

4. массив(1) { [«0744395****»]=> массив(6) { [0]=>> объект(stdClass)#1 (3) { [«носитель»]=>>> строка(11) «0744395****» [«телефон»]=>>>> строка(9) «Vodafone» [«статус»]=>>>>> строка(6) «Действительна» } [1]=>>>>>> объект(класс STD)#2 (3) { [«носитель»]=>>>>>>> строка(11) «0744395****» [«телефон»]=>>>>>>>> строка(3) «EE» [«статус»]=>>>>>>>>> строка(6) «Действительна» }

5. О, ради всего святого, тогда переместите детали, ВСЕ, что я сделал, это неправильно определил порядок полей в csv