使用JSON-RPC将数组从Perl传递到PHP

时间:2014-01-27 13:22:55

标签: php arrays json perl json-rpc

我正在尝试使用JSON-RPC将数组从Perl传递给PHP。所以这是Perl例程,它构成数组并返回它:

sub queueMemberList() : Public()
{       
        my @qNames;
        $connection = ConnectToMySql($dbName);
        $query = "select membername from queue_members";
        $statement = $connection->prepare($query);
        print $statement->execute();
                while(@data = $statement->fetchrow())
                {       #$sendStr = $sendStr."+".$data[0];
                        push(@qNames, $data[0]);
                }
        return \@qNames;
}

sub ConnectToMySql 
{       my ($db) = @_;
        open(ACCESS_INFO, "<accessAdd") || die "Can't access login credentials";
                my $dbName = <ACCESS_INFO>;
                my $host = <ACCESS_INFO>;
                my $userid = <ACCESS_INFO>;
                my $passwd = <ACCESS_INFO>;
                my $connectionInfo="dbi:mysql:$db;$host";
        close(ACCESS_INFO);

        chomp ($dbName, $host, $userid, $passwd);
        my $db_connection = DBI->connect($connectionInfo,$userid,$passwd);
        return $db_connection;
}

正如你所看到的,我已经传递了一个数组引用,就像我通常在Perl中那样(如果Perl程序正在接受它,我会将它转换回数组)。现在,这是我调用上面的例程并尝试显示数组的PHP。由于我不知道如何将其转换回来,因此我发布了简单的echo语句。

<?php
        ini_set('display_errors',1);
        ini_set('display_startup_errors',1);
        error_reporting(-1);

        require_once '/usr/src/jsonrpcphp/includes/jsonRPCClient.php';
        $myJSONconn2 = new jsonRPCClient('http://localhost:42337/jsonrpc/API/testArray');
        echo "Choose Member:<br>";
        try
        {       echo $myJSONconn2->queueMemberList();

        }
        catch (Exception $e)
        {
                echo nl2br($e->getMessage()).'<br />'."\n";
        }
?>

当前输出只显示浏览器上的Array,而不是其他内容。

你能帮我把它转换回阵列吗?

编辑:正如@grebneke建议的那样,我将echo替换为var_dump,这给了我以下输出:

array(2) { [0]=> string(5) "messi" [1]=> string(5) "lampard" }

当我使用print_r尝试时,这就是我得到的:

Array ( [0] => messi [1] => rahul )

这在PHP中意味着什么?

1 个答案:

答案 0 :(得分:2)

根据您var_dump / print_r的输出,$myJSONconn2->queueMemberList()返回普通PHP array,其中第一项为"messi",第二项为{{1} }}:

"rehul"

或循环:

$response = $myJSONconn2->queueMemberList();  // $response is now an array
print $response[0];                           // this will print: messi

我不知道这是否是你所期待的。但不需要“将其转换回数组” - 已经是一个数组。