我使用simplexml获取xml结果页面并将其转换为数组。然后我使用foreach循环来遍历数组记录。
问题是如果数组中只有一个结果,foreach循环没有发生,则不显示任何信息。
我必须检测是否只有一行或多行,具体取决于是否使用foreach循环。
想要看看是否有更简单的方法,所以我没有这么多代码,所有东西都适合foreach循环。
以下是一个例子:
$result = $data->params->results;
$result_count = intval($data->params->totalcount);
if($result_count > 1)
{
foreach(results AS $curr_result)
{
$result_name = $curr_result->name;
}
}
else if($result_count == 1)
{
$result_name = $result->name;
}
修改 我添加了结果变量,这是示例代码,在我看来我没有检查代码以确保它是正确的。如果只有一个结果,则数组如下所示:
["fld1"]=>
string(6) "value1"
["fld2"]=>
string(6) "value2"
["fld3"]=>
string(6) "value3"
If there is more than one result it looks like this:
[0]=>
["fld1"]=>
string(6) "value1"
["fld2"]=>
string(6) "value2"
["fld3"]=>
string(6) "value3"
[1]=>
["fld1"]=>
string(6) "value1"
["fld2"]=>
string(6) "value2"
["fld3"]=>
string(6) "value3"
再一次只是一个简单的例子,我确定上面的代码不是“正确”的说法,但它应该提供足够的信息来理解我在说什么。
答案 0 :(得分:3)
你可以尝试:
$results_array = (array)$result;
哪个类型应该将其强制转换为数组,即使它是返回的单个结果。
答案 1 :(得分:1)
这一行
if($result_count > 1)
{
当阵列中只有一个项目时,阻止foreach循环运行。你想要
if($result_count > 0)
{
答案 2 :(得分:1)
foreach(results AS $curr_result)
应该是:
foreach($results AS $curr_result)
答案 3 :(得分:1)
这就是我为了让它发挥作用所做的事情:
$result = $data->params->results;
$result_count = count($result);
if($result_count == 1)
{
$results_array[0] = $result;
}else
{
$results_array = $result;
}
//loop through $results_array
很抱歉,如果我的信息不够详细且令人困惑,如果您有更好的方法,请告诉我们!
答案 4 :(得分:0)
你的代码中有一个拼写错误,而且它没有使用数组。
$result_name = $results[0]->name;
就像FYI一样,您确实意识到if
语句中的循环只会将$ result_name设置为最后一个值。这样做会更容易
$result_name = $results[$result_count - 1]->name;
答案 5 :(得分:0)
这就是我刚刚做的一个干净的解决方案;
我首先为多个元素寻找子数组;
if (isset($data['ComplexArray']['This'][0])) $UseMe = $data['ComplexArray']['This'];
else $UseMe[0] = $data['ComplexArray']['This'][0];
foreach ($UseMe as $EachElement) {
.
.
.
}
- 通过添加数组元素,您不会破坏现有的" Foreach"代码,所以你不必拥有" IF(isset($ data [' ComplexArray'] [' This'] [0]))信封围绕整个" FOREACH"带有冗余代码的代码,仅仅使用现有的数组逻辑,因此它会选择" one"设置元素。