Сохранение значений из переменной в массив - PullRequest
0 голосов
/ 21 февраля 2019

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

string = "(33.110029967689556, 35.60865999564635), (33.093492845160036, 35.63955904349791), (33.0916232355565, 35.602995170206896)";

Я хочу это:

arrayX[0] = "33.110029967689556";
arrayX[1] = "33.093492845160036";
arrayX[2] = "33.0916232355565";
arrayY[0] = "35.60865999564635";
arrayY[1] = "35.63955904349791";
arrayY[2] = "35.602995170206896";

У кого-нибудь есть идеи?

Спасибо

Ответы [ 4 ]

0 голосов
/ 21 февраля 2019

Самый простой способ - использовать регулярное выражение для сопоставления каждого кортежа:

  • Каждое число представляет собой комбинацию цифр и .: регулярное выражение [\d\.]+ соответствуеттот;
  • Каждая координата имеет следующий формат: (, число, ,, пробел, число, ).Регулярное выражение \([\d\.]+,\s*[\d\.]+\).
  • Затем вы можете захватить каждое число, используя круглые скобки: \(([\d\.]+),\s*([\d\.]+)\).Это приведет к захвату групп: первая будет содержать координату X, а вторая Y.

Это регулярное выражение можно использовать с методом preg_match_all .

<?php

$string = '(33.110029967689556, 35.60865999564635), (33.093492845160036, 35.63955904349791), (33.0916232355565, 35.602995170206896)';

preg_match_all('/\(([\d\.]+)\s*,\s*([\d\.]+)\)/', $string, $matches);

$arrayX = $matches['1'];
$arrayY = $matches['2'];

var_dump($arrayX);
var_dump($arrayY);

Живой пример см. http://sandbox.onlinephpfunctions.com/code/082e8454486dc568a6557058fef68d6f10c8dbd0

0 голосов
/ 21 февраля 2019

Мое предложение, рабочий пример здесь: https://3v4l.org/W99Uu

$string = "(33.110029967689556, 35.60865999564635), (33.093492845160036, 35.63955904349791), (33.0916232355565, 35.602995170206896)";

// Split by each X/Y pair
$array = explode("), ", $string);

// Init result arrays
$arrayX = array();
$arrayY = array();

foreach($array as $pair) {
    // Remove parentheses
    $pair = str_replace('(', '', $pair);
    $pair = str_replace(')', '', $pair);

    // Split into two strings
    $arrPair = explode(", ", $pair);

    // Add the strings to the result arrays
    $arrayX[] = $arrPair[0];
    $arrayY[] = $arrPair[1];
}
0 голосов
/ 21 февраля 2019

Используйте substr для изменения подстроки, это можно сделать с помощью маленькой строчки кода.

$array_temp = explode('),', $string);

$arrayX = [];
$arrayY = [];

foreach($array_temp as $at)
{
  $at = substr($at, 1);
  list($arrayX[], $arrayY[]) = explode(',', $at);

}

print_r($arrayX);
print_r($arrayY);
0 голосов
/ 21 февраля 2019

Сначала нужно разбить строку на массив.Затем вы очищаете значение, чтобы получить только цифры.Наконец, вы помещаете новое значение в новый массив.

<?php
$string = "(33.110029967689556, 35.60865999564635), (33.093492845160036, 35.63955904349791), (33.0916232355565, 35.602995170206896)";
$loca = explode(", ", $string);

$arr_x = array();
$arr_y = array();

$i = 1;
foreach($loca as $index => $value){
    $i++;
    if ($i % 2 == 0) {
      $arr_x[] = preg_replace('/[^0-9.]/', '', $value);
    }else{
        $arr_y[] = preg_replace('/[^0-9.]/', '', $value);
    }
}

print_r($arr_x);
print_r($arr_y);

Вы можете проверить это здесь: http://sandbox.onlinephpfunctions.com/code/4bf04e7aabeba15ecfa114d8951eb771610a43a4

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