如何从单引号数组中创建数组
Posted
技术标签:
【中文标题】如何从单引号数组中创建数组【英文标题】:How to make array from a single quoted array 【发布时间】:2016-12-10 14:58:37 【问题描述】:我不知道如何将单引号数组转换为数组;
FOR 示例:-
我有
$Array = '["ID" => 9, "Value" => [40,15,20,25,30]]';
print_r($Array);
然后它显示像字符串而不是 数组
["ID" => 9, "Value" => [40,15,20,25,30]]
那么如何将其转换为数组
like结果会这样显示
Array
(
[ID] => 9
[Value] => Array
(
[0] => 40
[1] => 15
[2] => 20
[3] => 25
[4] => 30
)
)
也许你知道为什么我将数组放在单引号中,但这不是我要放的。
我在mysql
中的group_concat
之后从数据库中获取一个数组
这是数组
Array
(
[0] => Array
(
[GPN] => A
[PKGID] => PKG01
[Output] => ["ID" => 9, "Value" => [40,15,20,25,30]]
)
)
这里的输出是像字符串一样的元素
【问题讨论】:
是的,你是对的,但是看看[Output] => ["ID" => 9, "Value" => [40,15,20,25,30]]
也许正确的解决方案是查看查询,因为这是造成此问题的原因。 解决问题,而不是症状
尝试在数据库中至少放入一个 json。
如果你需要使用 group_concat 看看这个:***.com/questions/12511933/…
【参考方案1】:
你可以这样做,但可能很危险:
$Array = '["ID" => 9, "Value" => [40,15,20,25,30]]';
eval('$Array = '.$Array.';'); // Could be dangerous
echo '<pre>';
print_r($Array);
echo '</pre>';
在我上面的示例中,$Array
被假定为来自您的数据库的数据,例如 [Output] => ["ID" => 9, "Value" => [40,15,20,25,30]]
。由于它来自数据库,因此这意味着数据库数据存在恶意的可能性,eval()
将很乐意运行您提供的任何内容。
【讨论】:
$Array = '["ID" => 9, "Value" => "exec("rm -rf /")"]'; -> 只是可能发生的事情的一个例子。 @M.I.关闭,但我认为您的确切示例只会导致致命错误。 @M.I. OP 提到的group_concat
必须输出 ["ID" => 9, "Value" => [40,15,20,25,30]];exec("rm -rf /")
或仅输出 exec("rm -rf /")
才能使 eval()
注入工作。
是的,这是正确的,但仍会引发解析异常。 eval 不能这样使用,他应该尝试从数据库中获取其他内容,例如 json,在 SO 上找到另一个问题:***.com/questions/12511933/…
@M.I.我同意,但不幸的是,OP 没有透露任何其他细节,说明他们的group_concat
逻辑甚至是如何产生用于设置数组的有效语法(假设 php >= 5.4);坦率地说,这令人印象深刻。此外,我确信通过连接或 PHP 循环可以实现某些功能,但如果没有额外的细节,我会从 5 磅的袋子中取出 15 磅的垃圾。【参考方案2】:
您可以使用eval
将字符串解析为 php 代码,如下所示:
$s = '["ID" => 9, "Value" => [40,15,20,25,30]]';
eval('$a = ' . $s . ';');
print_r($a);
这仅适用于 php 5.4 及更高版本
注意
如果此字符串包含来自用户的数据,则使用eval
是不安全的。
替代解决方案
如果您是填充数据库记录的人,我建议在插入数据库之前使用json_encode
将Output
值序列化为json
。
然后你可以使用json_decode
来访问数组数据。
【讨论】:
评估可能很危险,但如何。eval
执行任何给定的代码。因此,如果您不知道代码是什么以及它处理什么,那么这样使用它是不安全的。
谢谢@Whiteulver 我喜欢你关于json_encode
的建议。【参考方案3】:
<?php
$str = '["ID" => 9, "Value" => [40,15,20,25,30]]';
$array = eval('return ' . $str . ';');
var_export($array);
输出:
array (
'ID' => 9,
'Value' =>
array (
0 => 40,
1 => 15,
2 => 20,
3 => 25,
4 => 30,
),
)
【讨论】:
【参考方案4】:所以,您的问题基本上是如何将 php 数组的字符串表示形式转换为 php 数组。我不知道这方面的任何工具,但是您可以使用 eval 函数。
$arr = [];
eval('$arr=' . $Array . ';');
// $arr contains php array
但是不建议这样做,因为您可以执行破坏应用程序安全性的任意代码。使用前请确保$Array
不包含任何恶意代码且所有字符串均已转义。
如果您以 root 用户身份运行应用程序,则更加危险。例如:
$Array = 'true?print_r($_SERVER['REQUEST_TIME']):0'
上面的代码会打印出你应用的所有服务器数据。
【讨论】:
【参考方案5】:我认为这个解决方案。
$array = [
"ID" => 9,
"Value" => [40,15,20,25,30],
];
print_r($array);
输出:
/* Array ( [ID] => 9 [Value] => Array ( [0] => 40 [1] => 15 [2] => 20
[3]=> 25 [4] => 30 ) ) */
对于其他数组:
$array =[
"0" => [
"GPN" => A,
"PKGID" => PKG01,
"Output" =>
[
"ID" => 9,
"Value" => [40,15,20,25,30]
]
]
];
print_r($array);
然后输出:
/*Array ( [0] => Array ( [GPN] => A [PKGID] => PKG01 [Output] => Array ( [ID] => 9 [Value] => Array ( [0] => 40 [1] => 15 [2] => 20 [3] => 25 [4] => 30 ) ) ) ) */
建议:名称“PKG01”。
psr-1 : 常量必须全部大写
来源:psr-1
【讨论】:
他有一个字符串可以将它转换成数组,这有什么帮助? 他想把一个数组传给一个数组数组 并非如此,他需要将字符串转换为数组,然后将其传递给另一个数组。他在问如何将这个 '["ID" => 9, "Value" => [40,15,20,25,30]]' 变成一个数组。以上是关于如何从单引号数组中创建数组的主要内容,如果未能解决你的问题,请参考以下文章
如何删除单引号并将双引号放在javascript中的对象数组中[关闭]
如何阻止 Swift 在我的 [String] 中注入转义的单引号?