0

第一次在这里发帖。。

所以我是 php、mysql 和 JSON 的新手,我遇到了一些问题,我可能只是以不正确的方式解决问题,所以让我知道你的想法。

基本上有一个我正在尝试做的网站,它有一些位于另一台服务器上的信息,我使用 JSON 获取该信息。

这是代码:

//Start of JSON Main Content Fetch + Main Content Render 
//JSON send_recv of menu array. Assign results to $main_content_b_render
$main_content_fetch=send_recv("menu", array("id" => "17", "fetchContent" => TRUE));


//Renders menu from JSON results.
function render_main_content($main_content_fetch)
{

//Start of processing $menu_result
$main_content_b_render = $main_content_fetch['content'];
print_r($main_content_fetch);
    }
    render_main_content($main_content_fetch['results']);
    ?>

我实际上可以从另一台服务器获得以下内容:

Array ( [id] => 17 [name] => Accessories [reference] => [content] => Array ( [0] => Array ( [type] => Heading1 [content] => BLAH BLAH BLAH TXT TXT TXT [scope] => DetailAndThumb [active] => 1 [reference] => [name] => accblurb ) [1] => Array ( [type] => Image [align] => Left [image] => http://URL.../image/43/webcontent/accshop11.jpg [thumb] => http://URL....com.au/image/thumb/100x100/43/webcontent/accshop11.jpg [scope] => DetailAndThumb [active] => 1 [reference] => [name] => accshop1.jpg ) ) )

我可以将数组值分配给一个变量,但它只会分配第一个值,例如:

如果我把它放在函数中并回显它 $id = $main_content_fetch['content']; 回声 $id;

我得到的只是'Array',我真正想要的是位于返回信息后面的'BLAH BLAH BLAH TXT TXT TXT',我们实际上是位于最后一组括号中的所有内容......

( [type] => Heading1 [content] => BLAH BLAH BLAH TXT TXT TXT [scope] => DetailAndThumb [active] => 1 [reference] => [name] => accblurb ) [1] => Array ( [ type] => Image [align] => Left [image] => http://URL.../image/43/webcontent/accshop11.jpg [thumb] => http://URL....com. au/image/thumb/100x100/43/webcontent/accshop11.jpg [范围] => DetailAndThumb [活动] => 1 [参考] => [名称] => accshop1.jpg )

我想要做的是能够基本上将我得到的所有内容分配给一个变量,就像它一样。因为我认为我可以很容易地挑选出我想要的东西……而且我不知道还有其他方法可以做到这一点:/

对不起,如果它有点模糊,不太擅长解释自己,但我希望有人能锻炼我所说的并提供帮助。

4

5 回答 5

1

这是你的功能。我只是用 return 替换了 print_r

function render_main_content($main_content_fetch)
{

//Start of processing $menu_result
$main_content_b_render = $main_content_fetch['content'];
return $main_content_fetch;
}

假设您像这样调用此函数。现在您可以通过这种方式在单个变量中分配数组

$data = render_main_content($parameter);
$id = $data['id'];
$name = $data['name'];
......

希望这对您有所帮助。您所需要的只是将带有索引的数组变量分配给您想要的变量。

于 2012-05-09T10:30:51.837 回答
0

你可以使用类似的东西

foreach (array_expression as $key => $value ) {
    // TODO - probably need a recursive version
    $$key = $value;
}

遍历数组时,该语句允许您在代码中创建新变量。

但是,作为一项规则,您永远不应该依赖从其他服务器获得的输出格式。我的建议是从输入中明确提取您需要的信息,而不是按原样导入。

例如,你会做

$id = input['id'];

然后,您可以检查是否所有内容都已正确分配并捕获任何错误。

于 2012-05-09T10:30:10.500 回答
0

您可以使用以下 php 代码解决此问题

$value) { $$key = $value; } //或者.... foreach($user as $key=>$value) { ${$key} = $value; } ?>
于 2012-05-09T10:51:55.160 回答
0

抱歉,刚刚发现你有嵌套数组,为什么不通过 $main_content_fetch["content"][0]["content"] 访问所需的项目?无论如何,通过 print_r($arr, TRUE) 您可以打印实际项目并查看您正在处理的数组的结构。

如果我理解正确,为了获得 BLA BLA BLA 文本,您的代码应如下所示:

//Start of JSON Main Content Fetch + Main Content Render 
//JSON send_recv of menu array. Assign results to $main_content_b_render
$main_content_fetch=send_recv("menu", array("id" => "17", "fetchContent" => TRUE));


//Renders menu from JSON results.
function render_main_content($main_content_fetch)
{
     //Start of processing $menu_result
     $main_content_b_render = $main_content_fetch['content'];

     //return the second level "content"
     return $main_content_b_render[0]['content'];
}

$content = render_main_content($main_content_fetch['results']);
print $content;
?>
于 2012-05-09T11:02:18.123 回答
-1

调试时首先使用 print_r($arr, TRUE ) 打印您的数组,这将对您有很大帮助:-)(不要忘记 TRUE 标志!)。您可以像以前一样访问数组中的任何项目,但看起来您正在打印 $main_content_fetch 而不是 $main_content_b_render?

于 2012-05-09T10:32:55.853 回答