我有php脚本如下;
$ages = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34);
$ages2 = '"Peter"=>32, "Quagmire"=>30, "Joe"=>34';
$array = explode(",", $ages2);
echo $array["Peter"];
echo $ages["Peter"];
在这种情况下,echo $ages["Peter"];
运行良好,但echo $array["Peter"];
无效。任何人都可以解决这个问题..
提前致谢。
blasteralfred
答案 0 :(得分:4)
你必须分两步:
', '
作为分隔符进行爆炸;获取"Peter"=>32
'=>'
作为分隔符进行爆炸,以分割名称和年龄
例如,您可以使用以下内容:
$result = array();
$ages2 = '"Peter"=>32, "Quagmire"=>30, "Joe"=>34';
foreach (explode(', ', $ages2) as $couple) {
list ($name, $age) = explode('=>', $couple);
$name = trim($name, '"');
$result[$name] = $age;
}
var_dump($result);
并且,转储数组,您将获得以下输出:
array
'Peter' => string '32' (length=2)
'Quagmire' => string '30' (length=2)
'Joe' => string '34' (length=2)
这意味着使用此:
echo $result['Peter'];
会得到你:
32
答案 1 :(得分:3)
当然它不起作用。爆炸只是按给定的分隔符拆分,但不会创建关联数组。
答案 2 :(得分:0)
你真正拥有这样一个字符串的唯一希望就是手动解析它。使用preg_match_all,或者我想你可以这样做:
$array = eval('return array('.$ages2.');');
但当然不建议这样做,因为它可能在很多方面出错。
无论如何,如果您需要更多帮助,我很确定您可以重构此代码或为我们提供更多背景信息。
答案 3 :(得分:0)
您需要通过提取名称和年龄来自己构建数组:
<?php
$array = array();
$ages2 = '"Peter"=>32, "Quagmire"=>30, "Joe"=>34';
foreach (explode(",", $ages2) as $element) {
$parts = explode("=>", $element);
if (count($parts) == 2) {
$name = str_replace(array('"', ' '), '', $parts[0]);
$age = (int) $parts[1];
$array[$name] = $age;
}
}
print_r($array);
答案 4 :(得分:0)
$ ages2不是一个数组,所以你在这里尝试的东西不会直接工作,但你可以将带有该结构的字符串转换成这样的数组:
$ages2 = '"Peter"=>32, "Quagmire"=>30, "Joe"=>34';
$items = explode(",", $ages2);
foreach ($items as $item) {
list($key,$value) = explode('=>',$item);
$key = str_replace('"','',trim($key)); // Remove quotes and trim whitespace.
$array[$key] = (int)$value;
}
如果你是var_dump($ array),你将拥有:
array(3) {
["Peter"]=>
int(32)
["Quagmire"]=>
int(30)
["Joe"]=>
int(34)
}
所以你可以按照预期做到这一点,然后退出:
echo $array['Peter']