2011-05-05 52 views
0

我使用simplexml來獲取xml結果頁並將其轉換爲數組。然後我使用foreach循環遍歷數組記錄。如果只發現一個結果,則PHP for each loop不起作用

問題是如果數組中只有一個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" 

同樣只是一個簡單的例子,我敢肯定,心不是上面的代碼「正確的」每說,但它應該給足夠的信息來了解林談論。

+1

*爲什麼*不起作用? – 2011-05-05 17:49:24

+1

我不確定這裏的問題是什麼,但是當數組中只有一個元素時,我可以證明'foreach'正在工作 – sdleihssirhc 2011-05-05 17:50:46

+0

不確定它是否是錯誤類型,但是您正在循環「結果'不是有效的變量名稱,應該是'$ results'。 – 2011-05-05 17:50:58

回答

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 

很抱歉,如果我的信息wasnt足夠詳細和令人困惑,如果你有更好的方式做到這一點,請讓我知道!

1

此行

if($result_count > 1) 
{ 

從當只有一個數組中的項目運行,防止您的foreach循環。你想

if($result_count > 0) 
{ 
0

你的代碼有一個錯字,它不使用數組。

$result_name = $results[0]->name; 

正如一個供參考,你一定要明白,在if聲明循環將只需設置$ result_name到最後一個值。做

$result_name = $results[$result_count - 1]->name; 
1
foreach(results AS $curr_result) 

應該會更容易:

foreach($results AS $curr_result) 
3

你可以嘗試:

$results_array = (array)$result; 

這應該鍵入它轉換爲一個數組,即使它是返回一個結果。

+0

簡單而有效的謝謝! – asherrard 2016-10-13 21:17:45

0

下面是我剛做的一個乾淨的解決方案;

我首先查找了多個元素的子數組;

if (isset($data['ComplexArray']['This'][0])) $UseMe = $data['ComplexArray']['This']; else $UseMe[0] = $data['ComplexArray']['This'][0]; foreach ($UseMe as $EachElement) { . . . }

在XML過程

- 通過增加數組元素,你不打破現有的「的foreach」代碼,因此你不必有「IF(isset($數據[‘ComplexArray’] ['This'] [0]))信封圍繞整個具有冗餘代碼的「FOREACH」代碼,僅僅使用現有的陣列邏輯,因此它拾取「一個」設置元素。

+0

歡迎來到Stack Overflow! 「在這裏,使用這個代碼」的答案一般都不被很好地接受 - 請編輯你的答案來解釋代碼如何工作。 – dorukayhan 2016-09-22 23:48:22