如何将下面的字符串转换为数组?
pg_id=2&parent_id=2&document&video
这就是我要找的数组,
array(
'pg_id' => 2,
'parent_id' => 2,
'document' => ,
'video' =>
)
如何将下面的字符串转换为数组?
pg_id=2&parent_id=2&document&video
这就是我要找的数组,
array(
'pg_id' => 2,
'parent_id' => 2,
'document' => ,
'video' =>
)
。使用的作用是:将字串符
$str = 'pg_id=2&parent_id=2&document&video';
parse_str($str, $arr);
print_r($arr);
有几个可能的方法,但对你来说,已经有一个内置的parse_str函数:
$array = array();
parse_str($string, $array);
var_dump($array);
您需要parse_str函数,并且需要设置第二个参数,以便将数据放入数组中,而不是放入单个变量中。
$get_string = "pg_id=2&parent_id=2&document&video";
parse_str($get_string, $get_array);
print_r($get_array);
使用http://us1.php.net/parse_str
注意,它的用法是:
parse_str($str, &$array);
not
$array = parse_str($str);
请注意,以上内容仅适用于PHP 5.3及更早版本。在PHP 5.4中删除了调用时引用传递。
如果您在将查询字符串转换为数组时遇到问题,因为已编码的&符号
&
然后确保使用html_entity_decode
例子:
// Input string //
$input = 'pg_id=2&parent_id=2&document&video';
// Parse //
parse_str(html_entity_decode($input), $out);
// Output of $out //
array(
'pg_id' => 2,
'parent_id' => 2,
'document' => ,
'video' =>
)
有时parse_str()单独是准确的,它可以显示如下:
$url = "somepage?id=123&lang=gr&size=300";
Parse_str()将返回:
Array (
[somepage?id] => 123
[lang] => gr
[size] => 300
)
最好像这样将parse_str()与parse_url()结合起来:
$url = "somepage?id=123&lang=gr&size=300";
parse_str( parse_url( $url, PHP_URL_QUERY), $array );
print_r( $array );
对于这个特定的问题,选择的答案是正确的,但如果在URL中有一个多余的参数,比如额外的“e”,函数将无声地失败,而不会抛出错误或异常:
a=2&b=2&c=5&d=4&e=1&e=2&e=3
所以我更喜欢使用我自己的解析器,像这样:
//$_SERVER['QUERY_STRING'] = `a=2&b=2&c=5&d=4&e=100&e=200&e=300`
$url_qry_str = explode('&', $_SERVER['QUERY_STRING']);
//arrays that will hold the values from the url
$a_arr = $b_arr = $c_arr = $d_arr = $e_arr = array();
foreach( $url_qry_str as $param )
{
$var = explode('=', $param, 2);
if($var[0]=="a") $a_arr[]=$var[1];
if($var[0]=="b") $b_arr[]=$var[1];
if($var[0]=="c") $c_arr[]=$var[1];
if($var[0]=="d") $d_arr[]=$var[1];
if($var[0]=="e") $e_arr[]=$var[1];
}
var_dump($e_arr);
// will return :
//array(3) { [0]=> string(1) "100" [1]=> string(1) "200" [2]=> string(1) "300" }
现在你已经有了每个参数在它自己的数组中出现的所有情况,如果你想,你总是可以将它们合并到一个数组中。
希望有帮助!
可以使用PHP字符串函数parse_str(),后面跟着foreach循环。
$str="pg_id=2&parent_id=2&document&video";
parse_str($str,$my_arr);
foreach($my_arr as $key=>$value){
echo "$key => $value<br>";
}
print_r($my_arr);
这是在MySQL和SQL Server中拆分查询的PHP代码:
function splitquery($strquery)
{
$arrquery = explode('select', $strquery);
$stry = ''; $strx = '';
for($i=0; $i<count($arrquery); $i++)
{
if($i == 1)
{
echo 'select ' . trim($arrquery[$i]);
}
elseif($i > 1)
{
$strx = trim($arrquery[($i-1)]);
if(trim(substr($strx,-1)) != '(')
{
$stry = $stry . '
select ' . trim($arrquery[$i]);
}
else
{
$stry = $stry.trim('select ' . trim($arrquery[$i]));
}
$strx = '';
}
}
return $stry;
}
例子:
查询前
Select xx from xx select xx,(select xx) from xx where y=' cc'
select xx from xx left join (select xx) where (select top 1 xxx from xxx) oder by xxx desc";
查询后
select xx from xx
select xx,(select xx) from xx where y=' cc'
select xx from xx left join (select xx) where (select top 1 xxx from xxx) oder by xxx desc
你可以试试下面的代码:
<?php
$str = "pg_id=2&parent_id=2&document&video";
$array = array();
parse_str($str, $array);
print_r($array);
?>
输出:
Array
(
[pg_id] => 2
[parent_id] => 2
[document] =>
[video] =>
)