Как преобразовать математическое выражение в строку в php?

#php #laravel #maatwebsite-excel

#php #laravel #веб-сайт maatwebsite-excel

Вопрос:

Я просто хотел найти способ преобразовать математическое выражение в строку. Существует множество решений для преобразования строки в математическую форму или вычисления математического выражения внутри строки, но нет ни одного решения для моей проблемы.

 $math_expression = 10/24/2020;
$result = strval($math_expression);
echo $result;
 

Вывод:

 0.00020627062706271
 

Я также пробовал

 (string)$math_expression
 

Но результат тот же 0.00020627062706271 .

Я хочу , чтобы результат был '10/24/2020' таким .

Вот функция контроллера:

     public function importScores(Request $request)
    {
        $fileName = time() . '.' . $request->file->getClientOriginalExtension();
        $request->file->move(storage_path('upload'), $fileName);
        $filePath = storage_path('upload/' . $fileName);
        Excel::import(new ScoresImport, $filePath);


        $scores = Score::all();
        return response()->json(['scores' => $scores, 'request' => $filePath], 200);
    }


 

Вот класс ScoresImport:

 <?php

namespace AppImports;

use AppModelsScore;
use CarbonCarbon;
use IlluminateSupportCollection;
use MaatwebsiteExcelConcernsToCollection;

class ScoresImport implements ToCollection
{
    public function collection(Collection $rows)
    {
        foreach ($rows as $key => $row) {
            if ($key > 0) {

                Score::create([
                    'user_id'     => $row[0],
                    'result'    => $row[1],
                    'grade_date'   => Carbon::createFromFormat('m/d/Y', $row[2])->format('m/d/Y'), //Coming from excel file in 11/23/2020 MM/dd/yyy format
                    // 'grade_date'   => $row[2], // I also tried as this and with (string)$row[2] amp;amp; strval($row[2])
                    'ie'   => $row[3]
                ]);
            }
        }
    }


    public function chunkSize(): int
    {
        return 1000;
    }

    public function batchSize(): int
    {
        return 1000;
    }
}

 

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

1. Обведите его кавычками. "10/24/2020" .

2. В фактическом коде 10/24/2020 происходит из файла Excel, который будет загружен пользователем, поэтому нельзя просто заключать его в кавычки.

3. Тогда вам не нужно ничего делать. При извлечении это уже будет строка.

4. Нет, это не так, поэтому я ищу решение.

5. Можете ли вы показать код, который считывает значение из файла?

Ответ №1:

Ну, я не думаю, что это имеет отношение к PHP, поскольку все математические операции будут вычисляться при любых обстоятельствах.

Я не использовал упомянутый вами пакет. Но, просто просмотрев их код, я понял, что он использует другой пакет под названием «PHPOffice PhpSpreadsheet» в качестве зависимости. В пакете есть функция с именем excelToDateTimeObject, которая, я думаю, поможет вам решить проблему.

Итак, если я предполагаю, что вы используете версию: 3.1 Laravel-Excel, ваш контроллер будет выглядеть примерно так:

 <?php

// ...

use PhpOfficePhpSpreadsheetSharedDate;

class ScoresImport implements ToCollection
{
    public function collection(Collection $rows)
    {
        foreach ($rows as $key => $row) {
            if ($key > 0) {
               $phpDateObject = Date::excelToDateTimeObject($row[2]);
               $gradeDateToCreate = Carbon::instance($phpDateObject)->format('m/d/Y');

                Score::create([
                    'user_id'    => $row[0],
                    'result'     => $row[1],
                    'grade_date' => $gradeDateToCreate,
                    'ie'   => $row[3]
                ]);
            }
        }
    }

// ...

}
 

Ответ №2:

Я думаю, что это невозможно, если вы не импортируете данные в виде строки, поскольку переменная сохраняет импортируемое вами значение, она уже вычисляет значение.

Возможно, вам следует использовать функцию КОНКАТЕНАЦИИ в Excel, чтобы добавлять кавычки до и после вашего выражения.