PHP-数组格式化变量到实数组
我认为我的问题很简单,但我看不出哪里出了问题。 我有一个“数组格式”字符串,它来自使用mysql的数据库,如下所示: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']]; 结果总是一行,前面的所有值
"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.Sjson_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);