【问题标题】:Parsing Array in PHP在 PHP 中解析数组
【发布时间】:2016-10-15 06:56:33
【问题描述】:

更新 1: 根据此代码的要求,我得到了

<?php
require_once 'Conf.php';
use Nemiro\Nginx\Conf as NginxConf;
$conf = new NginxConf('/etc/nginx/sites-available/proxy');

echo '<pre>'.var_dump($conf['server']['server_name']->ParametersAsString()).'</pre><br>';
echo '<pre>'.var_dump($conf['server']['location']).'</pre>';
?>

我明白了

字符串(9)“本地主机”

object(Nemiro\Nginx\Directive)#8 (3) { ["Name"]=> string(8) "location" ["参数"]=> 数组(1) { [0]=> 字符串(1) "/" } ["指令"]=> object(Nemiro\Nginx\DirectiveCollection)#9 (1) { ["Items"]=> array(1) { ["proxy_pass"]=> 对象(Nemiro\Nginx\Directive)#10 (3) { ["Name"]=> 字符串(10)“proxy_pass”[“参数”]=>数组(1){[0]=>字符串(19) "http://127.0.0.1:80" } ["指令"]=> object(Nemiro\Nginx\DirectiveCollection)#11 (1) { ["Items"]=> array(0) { } } } } } }

但是我如何只提取“localhost”和“proxy_pass”之类的?非常感谢!


所以我现在有这个数组

object(Nemiro\Nginx\Directive)#2 (3) { ["Name"]=> string(6) "server"
["Parameters"]=> NULL ["Directives"]=>
object(Nemiro\Nginx\DirectiveCollection)#3 (1) { ["Items"]=> array(3)
{ ["listen"]=> object(Nemiro\Nginx\Directive)#4 (3) { ["Name"]=>
string(6) "listen" ["Parameters"]=> array(1) { [0]=> string(2) "80" }
["Directives"]=> object(Nemiro\Nginx\DirectiveCollection)#5 (1) {
["Items"]=> array(0) { } } } ["server_name"]=>
object(Nemiro\Nginx\Directive)#6 (3) { ["Name"]=> string(11)
"server_name" ["Parameters"]=> array(1) { [0]=> string(9) "localhost"
} ["Directives"]=> object(Nemiro\Nginx\DirectiveCollection)#7 (1) {
["Items"]=> array(0) { } } } ["location"]=>
object(Nemiro\Nginx\Directive)#8 (3) { ["Name"]=> string(8) "location"
["Parameters"]=> array(1) { [0]=> string(1) "/" } ["Directives"]=>
object(Nemiro\Nginx\DirectiveCollection)#9 (1) { ["Items"]=> array(1)
{ ["proxy_pass"]=> object(Nemiro\Nginx\Directive)#10 (3) { ["Name"]=>
string(10) "proxy_pass" ["Parameters"]=> array(1) { [0]=> string(19)
"http://127.0.0.1:80" } ["Directives"]=>
 object(Nemiro\Nginx\DirectiveCollection)#11 (1) { ["Items"]=> array(0)
{ } } } } } } } } } 80string(9) "localhost"

这是通过调用来完成的

var_dump($conf['server']);

if ($conf['server']->ContainsChild('listen'))
{
  print_r($conf['server']['listen']->ParametersAsString());
}

var_dump($conf['server']['server_name']->ParametersAsString());
var_dump($conf['server']['root']->ParametersAsString());
var_dump($conf['server']['location']);

如果我想调用例如“http://127.0.0.1:80”而不显示任何其他内容,我该怎么办?所以它会像

echo $conf['server']['location']['proxy_passs']

但以上不起作用?有什么想法吗?

我在 Github 上在线上传了代码,解析器不是我的代码。我正在尝试使用它,它可以让我轻松编辑 nginx 文件,如果你找到更好的代码请告诉我

https://github.com/chessboardthedev/Parser

【问题讨论】:

  • 你的转储是一个对象,把
     放在它周围,这样会更容易阅读
  • 那不是数组。这是一个对象。
  • 如果您只需要实际的本地主机地址/域名,则无需转储所有其他对象。您只需要最后两个之一: var_dump($conf['server']['root']->ParametersAsString());或 var_dump($conf['server']['location']);尝试转储这些并将其张贴在这里。您只需要调用正确的对象,就可以轻松搞定。

标签: php arrays nginx


【解决方案1】:

我必须处理这个

echo $conf['server']['location']['proxy_pass']['0'];

输出

http://127.0.0.1:80

来自

object(Nemiro\Nginx\Directive)#8 (3) { ["Name"]=> string(8) "location" ["Parameters"]=> array(1) { [0]=> string( 1) "/" } ["Directives"]=> object(Nemiro\Nginx\DirectiveCollection)#9 (1) { ["Items"]=> array(1) { ["proxy_pass"]=> object(Nemiro\ Nginx\Directive)#10 (3) { ["Name"]=> string(10) "proxy_pass" ["Parameters"]=> array(1) { [0]=> string(19) "http://127.0.0.1:80" } ["Directives"]=> object(Nemiro\Nginx\DirectiveCollection)#11 (1) { ["Items"]=> array(0) { } } } } } }

谢谢你:)

【讨论】:

    猜你喜欢
    • 2013-04-13
    • 2011-04-22
    • 2015-11-23
    • 2011-06-17
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    相关资源
    最近更新 更多