Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-数组格式化变量到实数组_Php_Arrays - Fatal编程技术网

PHP-数组格式化变量到实数组

PHP-数组格式化变量到实数组,php,arrays,Php,Arrays,我认为我的问题很简单,但我看不出哪里出了问题。 我有一个“数组格式”字符串,它来自使用mysql的数据库,如下所示: "op_a" => "Text goes here, "op_b" => "Another one", "op_c" => "Third one" 但由于它是一个变量,$foo['ops'],我想让它成为一个真正的数组。我试过: $ops = (array)$foo['ops']; or $ops = [$foo['ops']]; 结果总是一行,前面的所有值

我认为我的问题很简单,但我看不出哪里出了问题。 我有一个“数组格式”字符串,它来自使用mysql的数据库,如下所示:

"op_a" => "Text goes here,
"op_b" => "Another one",
"op_c" => "Third one"
但由于它是一个变量,
$foo['ops']
,我想让它成为一个真正的数组。我试过:

$ops = (array)$foo['ops'];
or
$ops = [$foo['ops']];
结果总是一行,前面的所有值都在
[0]
键中

[0] => "op_a"=>"Text goes here", "op_b"=>"Another one", "op_c"=>"Third one"

我该怎么办?

这能帮你找到你想要的东西吗

$ops = array() ;
foreach($foo['ops'][0] as $key=>$value) {
    $ops[$key] = $value ;
}

这是我的解决方案,根据我对你的问题的理解,假设整个数组是作为一个单数字符串返回的,而不是字符串数组

因为它都是一个字符串,所以我必须处理双引号,否则键和值看起来像:
$newarray[“key”“]”=>“value”“


真正的解决方案是更好地将存储在db中的数组格式化为序列化字符串或JSON字符串,这样从db返回时就可以更轻松地使用它。这个解决方案对于本应简单得多的东西来说太多了。

您在
文本的末尾缺少了一个引号

$foo['ops'] = '"op_a" => "Text goes here", "op_b" => "Another one", "op_c" => "Third one"';
                                        ^
如果要解决此问题:

eval('$result = array('.$foo['ops'].');');
print_r($result);
收益率:

Array
(
    [op_a] => Text goes here
    [op_b] => Another one
    [op_c] => Third one
)

在这样的RDBMS中存储数据似乎是一种浪费。 但我能做到这一点

<?php
$s = '"op_a" => "Text goes here, "op_b" => "Another one", "op_c" => "Third one"';
$tmp = explode(',', $s);
$array = [];
foreach ($tmp as $v) {
    $t = explode('=>', $v);
    $array[$t[0]] = $t[1];
}
var_dump($array);

Define“real array”它是纯文本的,当它来自数据库时,我想把它做成一个数组,每个“op_”都是一个键。你能提供一些数据库代码吗。结果,Mysql不会返回字符串,它几乎总是一个对象或一个对象数组,不知道如何得到一个字符串,即arrayP.S
json_encode($foo['ops'],true)
将有效的json转换为关联数组,您可以尝试。我可能解释得不太清楚,我有一个表,上面有一个varchar类型的行,ops行,其中有这个“数组格式”,要获取行,我查询并使用fetch_assoc(),比如$foo['ops']。但现在我想将其作为一个新的实数数组。为foreach()@McCormick提供的参数无效,如果
$foo['ops'][0]
不是正确的变量,请将其替换为正确的变量。您的原始帖子不清楚。至少您的帖子解释了额外的引用,@JonathanEltgrothGreat minds;)我很乐意与您合作,因为您可以选择一个变量名!。。。真的投反对票吗?学会阅读讽刺的人。。。
<?php
$s = '"op_a" => "Text goes here, "op_b" => "Another one", "op_c" => "Third one"';
$tmp = explode(',', $s);
$array = [];
foreach ($tmp as $v) {
    $t = explode('=>', $v);
    $array[$t[0]] = $t[1];
}
var_dump($array);