Php 从数组中获取值
我知道这是个新手问题 我从javascript中提取了一些预先格式化的json,如下所示:Php 从数组中获取值,php,arrays,Php,Arrays,我知道这是个新手问题 我从javascript中提取了一些预先格式化的json,如下所示: [[[455837.99,2896882.36],[455862.44,2896888.35],[455868.79,2896860.14],[455864.3,2896852.78],[455845.76,2896848],[455837.99,2896882.36]]] 我尝试了一个在线格式化的数组,该数组显示如下: Array ( [0] => Array ( [0
[[[455837.99,2896882.36],[455862.44,2896888.35],[455868.79,2896860.14],[455864.3,2896852.78],[455845.76,2896848],[455837.99,2896882.36]]]
我尝试了一个在线格式化的数组,该数组显示如下:
Array
(
[0] => Array
(
[0] => Array
(
[0] => 455837.99
[1] => 2896882.36
)
[1] => Array
(
[0] => 455862.44
[1] => 2896888.35
)
[2] => Array
(
[0] => 455868.79
[1] => 2896860.14
)
[3] => Array
(
[0] => 455864.3
[1] => 2896852.78
)
[4] => Array
(
[0] => 455845.76
[1] => 2896848
)
[5] => Array
(
[0] => 455837.99
[1] => 2896882.36
)
)
)
所有第三个[0]都是我需要的X,所以所有以455开头的东西。所有的[1]都是Y。我想把这两个元素组合在一起,分别是X和Y
我的问题是,我不知道如何在该区域之外访问它们,我尝试了以下方法:
preg_match_all('/\[{3}.*\]{3}/', $data, $matches);
$arr=array();
foreach ($matches[0] as $match)
{
$arr[]=json_decode($match);
}
echo '<br>';
$newmatch = json_decode($match);
preg\u match\u all('/\[{3}.*\]{3}/',$data,$matches);
$arr=array();
foreach($matches[0]为$match)
{
$arr[]=json_解码($match);
}
回声“
”;
$newmatch=json_解码($match);
如果有人能给我指出一个方向,让我能够得到一个基本上是X和Y值的循环,我会非常感激,无论我何时尝试从我得到的数组中回送一些东西:
1) 数组到字符串的转换
我不确定这是否是因为三个方括号,这是一个数组中的一个数组中的一个数组。你这样做完全错了。它是json。您不会使用字符串操作从中提取数据。您可以使用
json\u decode()
,从中可以得到一个完全正常的PHP数组。@MarcB我不是想从中提取数据,我想告诉您,我刮取了一个json字符串,我正试图访问该数组,但我不确定如何访问它-因为它的结构。因此它在RegExp中被刮取,然后成为一个数组,这就是为什么我认为我需要对它进行两次解码?您先解码主字符串,然后使用$arr[0]
,$arr[1]
,等等。。。为了得到那些子阵列。永远不要像现在这样弄乱json字符串。获取损坏的json太容易了。
$data = "[[[455837.99,2896882.36],[455862.44,2896888.35],[455868.79,2896860.14],[455864.3,2896852.78],[455845.76,2896848],[455837.99,2896882.36]]]";
$data_array = json_decode($data);
if (is_array($data_array) && array_key_exists(0, $data_array)) {
foreach ($data_array[0] as $element) {
$x = array_key_exists(0, $element) ? $element[0] : "N/A";
$y = array_key_exists(1, $element) ? $element[1] : "N/A";
printf("X: %s | Y: %s\n", $x, $y);
}
}