从字符串创建多维关联数组

时间:2018-04-12 14:55:38

标签: php arrays multidimensional-array

我想从字符串创建多维关联数组。从包含字符串的变量创建数组不起作用。 (使用PHP 7.1.13测试)

有效的示例:

$myVar = array('Projets associatifs'=>['29'=>'Projet 1','15'=>'Projet 2','28'=>'Projet 3'],
               'Projets éducatifs'=>  ['10'=>'Projet 4','33'=>'Projet 5','34'=>'Projet 6']);
print_r($myVar);

返回好结果:

Array
(
  [Projets associatifs] => Array
    (
        [29] => Projet 1
        [15] => Projet 2
        [28] => Projet 3
    )
  [Projets éducatifs] => Array
    (
        [10] => Projet 4
        [33] => Projet 5
        [34] => Projet 6
    )
)

不起作用的示例:

$myVar2 = "'Projets associatifs'=>['29'=>'Projet 1','15'=>'Projet 2','28'=>'Projet 3'],'Projets éducatifs'=>['10'=>'Projet 4','33'=>'Projet 5','34'=>'Projet 6']";
$myVar3 = array($myVar2);
print_r($myVar3);

返回错误结果:

Array
(
  [0] => 'Projets associatifs'=>['29'=>'Projet 1','15'=>'Projet 2','28'=>'Projet 3'],'Projets éducatifs'=>['10'=>'Projet 4','33'=>'Projet 5','34'=>'Projet 6']
)

如何使我的字符串变量$myVar2被接受用于创建数组?

2 个答案:

答案 0 :(得分:-1)

如果没有一些疯狂的正则表达式来解析字符串,你就无法做到这一点。如果你可以将字符串转换为json,那可能会有效。

所以这个 “'Projets associatifs'=> ['29'=>'Projet 1','15'=>'Projet 2','28'=>'Projet 3'],'Projetséducatifs'=> ['10'=>'Projet 4','33'=>'Projet 5','34'=>'Projet 6']“;

会变成这样的东西。

{Projets associatifs:{29:'Projet 1'},{15:'Projet 2'}}

我没有对此进行测试,因此您需要弄清楚如何编写json以满足您的需求,但是您可以通过json_decode()运行该字符串,它将创建您所需的结构寻找。

请注意json适用于对象。因此,如果对象不起作用,您将从json_decode中获取对象,然后转换为关联数组。

然而,如果你发现自己正在做这样愚蠢的事情,你应该重新评估你想要做的事情,并且可能找到解决方案的另一条路径。

答案 1 :(得分:-1)

由于它是PHP中的有效数组定义,因此可以eval将其作为PHP代码:

eval("\$myVar3 = array($myVar2);");
print_r($myVar3);

或者将其转换为JSON并对其进行解码。可能会更容易,但我让这个工作:

$myVar2 = str_replace(["'", '=>', '[', ']'], ['"', ':', '{', '}'], $myVar2);
$myVar3 = json_decode('{'.$myVar2.'}', true);
print_r($myVar3);

但是如果你正在创建/存储它,那么你最好只将JSON存储在第一位。