Почему функция str_replace заменяет значение на неверное значение в файле? - PullRequest
0 голосов
/ 10 октября 2019

Я использую str_replace() для редактирования файла, и файл корректно отредактирован за исключением двух последних значений.

Код PHP:

public function makeLyer() {
    $current_session = Session::getId();
    $value[] = Input::get('variable');
    $value[] = Input::get('scenario');
    $value[]= Input::get('component');
    $search[] = "MYVARIABLE";
    $search[] = "ID_SCENARIO";
    $search[] = "ID_COMPONENT";
    for ($i = 1; $i != 11; $i++) {
        $search[] = "lower".$i;
        $search[] = "upper".$i;
    }
    $qgs_layer = file_get_contents("/carbone/carbone_test.qgs");
    $getMinMax = //sql_query;
    $getMinMax = get_object_vars($getMinMax[0]);
    $min = $getMinMax['min'];
    $max = $getMinMax['max'];
    $range = ($max - $min) / 10;
    $lower[0] = $min;
    $upper[0] = $range + $lower[0];
    for ($i = 1; $i != 10; $i++) {
        $lower[$i] = $upper[$i - 1];
        $upper[$i] = $upper[$i - 1] + $range;
    }
    for ($i = 0; $i < 10; $i++) {
        $value[] = $lower[$i];
            $value[] = $upper[$i];
    }
    $file_name = "/carbone/".$current_session."_layer.qgs";
    $new_qgs_layer = str_replace($search, $value, $qgs_layer);
    file_put_contents($file_name, $new_qgs_layer);
    return Response::json($file_name, 200);
}

$value содержитхорошее значение, но при их замене в файл записываются не значения $value.

значение $value и $search:

$value = Array (
    [0] => flux_balance
    [1] => 1
    [2] => 3
    [3] => -2151
    [4] => -1941
    [5] => -1941
    [6] => -1731
    [7] => -1731
    [8] => -1521
    [9] => -1521
    [10] => -1311
    [11] => -1311
    [12] => -1101
    [13] => -1101
    [14] => -891
    [15] => -891
    [16] => -681
    [17] => -681
    [18] => -471
    [19] => -471
    [20] => -261
    [21] => -261
    [22] => -51 
)

$search =Array(
    [0] => MYVARIABLE
    [1] => ID_SCENARIO
    [2] => ID_COMPONENT
    [3] => lower1
    [4] => upper1
    [5] => lower2
    [6] => upper2
    [7] => lower3
    [8] => upper3
    [9] => lower4
    [10] => upper4
    [11] => lower5
    [12] => upper5
    [13] => lower6
    [14] => upper6
    [15] => lower7
    [16] => upper7
    [17] => lower8
    [18] => upper8
    [19] => lower9
    [20] => upper9
    [21] => lower10
    [22] => upper10 
)

Здесьlower10 и upper10 заменяются неверными значениями. Значения заменяются соответственно на «-21510» и «-19410», когда они должны быть «-261» и «-51».

1 Ответ

1 голос
/ 10 октября 2019

Это потому, что код заменил lower1 на -2151, поэтому lower10 равно lower1 + 0, поэтому lower10 становится -21510. (то же самое объяснение для upper10.

Решение: Если у вас есть возможность изменить заполнитель внутри файла, я предлагаю вам использовать [ ] для форматирования строки поиска, например: [lower1], .. . [lower10]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...