1

我有以下字符串:

$input = '[gallery ids="1151,1150,1149,1148,1147" name="ponny"]';

我需要将其解析为一个数组,因此所需的输出应如下所示:

$output = array(
  'ids'  => '1151,1150,1149,1148,1147',
  'name' => 'ponny'
);

伪标签名称gallery将被忽略。

在 PHP 中执行此操作的最有效方法是什么?

4

3 回答 3

0

作为最简单的解决方案,您可以提取引号之间的值

$input = '[gallery ids="1151,1150,1149,1148,1147" name="ponny"]';
preg_match_all('/\"([^\"]*?)\"/', $input, $matches);
$output = array(
    'ids'  => $matches[1][0],
    'name' => $matches[1][1]
);

的输出var_dump($output)

array (size=2)
  'ids' => string '1151,1150,1149,1148,1147' (length=24)
  'name' => string 'ponny' (length=5)
于 2013-10-08T14:44:02.413 回答
0
$idsStart=strpos('ids',$input);
$idsValueStart=strpos('"',$input,$idsStart);
$idsValueEnd=strpos('"',$input,$idsValueStart);
$ids=substr($input,$idsValueStart,$idsValueEnd-$idsValueStart);
$nameStart=strpos('name',$input);
$nameValueStart=strpos('"',$input,$nameStart);
$nameValueEnd=strpos('"',$input,$nameValueStart);
$name=substr($input,$nameValueStart,$nameValueEnd-$nameValueStart);
$output=array();
$output[]=$ids;
$output[]=$name;

看起来效率不高,但如果画廊数组中变量的顺序发生变化,它仍然应该给你正确的答案。

于 2013-10-08T14:45:09.593 回答
0

我不知道它的效率如何,但您可以将输入转换为 XML:

$input = '[gallery ids="1151,1150,1149,1148,1147" name="ponny"]';

$xml = str_replace( array( '[', ']' ), array( '<', ' />' ), $input );

var_dump( new SimpleXMLElement( $xml ) );
于 2013-10-08T14:48:39.090 回答