如何从单引号数组中创建数组

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] =&gt; ["ID" =&gt; 9, "Value" =&gt; [40,15,20,25,30]]。由于它来自数据库,因此这意味着数据库数据存在恶意的可能性,eval() 将很乐意运行您提供的任何内容。

【讨论】:

$Array = '["ID" => 9, "Value" => "exec("rm -rf /")"]'; -> 只是可能发生的事情的一个例子。 @M.I.关闭,但我认为您的确切示例只会导致致命错误。 @M.I. OP 提到的 group_concat 必须输出 ["ID" =&gt; 9, "Value" =&gt; [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_encodeOutput 值序列化为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中的对象数组中[关闭]

PHP:准备好的语句无法从单引号中逃脱

如何想数据库中插入单引号急

如何阻止 Swift 在我的 [String] 中注入转义的单引号?

我应该对单引号使用 php 引号转义还是在数组中使用双引号?

单引号中的双引号,反之亦然