2017-04-26 80 views
1

我有一些腳本與foreach,見下文, 我的每個始終顯示輸出2 - 1 - 3 - 4 - 等從我的JSON對象,如何解決我的問題,?foreach迭代結構顯示

<?php public function renderLayout3x3($data=array()){ 
    $output = "<ul>"; 

    foreach ($data as $key => $value) { 
     if($value['posisi'] == '1'){ 
      $output .= "<li><ul> 
           <li>POS:".$value['posisi']."</li> 
           <li>HOSTNAME:".$value['hostname']."</li> 
         </ul></li>"; 
     } 
     if($value['posisi'] == '2'){ 
      $output .= "<li><ul> 
           <li>POS:".$value['posisi']."</li> 
           <li>HOSTNAME:".$value['hostname']."</li> 
         </ul></li>"; 
     } 
     if($value['posisi'] == '3'){ 
      $output .= "<li><ul> 
           <li>POS:".$value['posisi']."</li> 
           <li>HOSTNAME:".$value['hostname']."</li> 
         </ul></li>"; 
     } 

     //for debug.. 
     print json_encode($value['posisi']); 
     /* 
     Output : "2","1","3","4","5","6","7","8","9" 
     Why : 2 - 1 - 3 - etc, not 1 - 2 - 3 - etc 
     */ 
    } 
    $output .= "</ul>"; 
    return $output; 
} 

$json_data = '{"ch":"79", 
       "ipaddr":"172.16.11.100", 
       "hostname":"TMC-MALL01", 
       "posisi":"2", 
       "monitorid":"17", 
       "view_dimension":"2*2", 
       "input_ipaddr":"" 
      }{ 
       "ch":"78", 
       "ipaddr":"172.16.11.99", 
       "hostname":"TMC-JSB01", 
       "posisi":"1", 
       "monitorid":"17", 
       "view_dimension":"2*2", 
       "input_ipaddr":"" 
      }{ 
       "ch":"80", 
       "ipaddr":"172.16.11.101", 
       "hostname":"TMC-MALL02", 
       "posisi":"3", 
       "monitorid":"17", 
       "view_dimension":"2*2", 
       "input_ipaddr":"" 
      }{ 
       "ch":"92", 
       "ipaddr":"172.16.11.106", 
       "hostname":"TMC-PALMA01", 
       "posisi":"4", 
       "monitorid":"17", 
       "view_dimension":"2*2", 
       "input_ipaddr":"" 
      }{ 
       "ch":"93", 
       "ipaddr":"172.16.11.107", 
       "hostname":"TMC-PALMA02", 
       "posisi":"5", 
       "monitorid":"17", 
       "view_dimension":"2*2", 
       "input_ipaddr":"" 
      }{ 
       "ch":"112", 
       "ipaddr":"172.16.11.129", 
       "hostname":"TMC-R.PRM01", 
       "posisi":"6", 
       "monitorid":"17", 
       "view_dimension":"2*2", 
       "input_ipaddr":"" 
      }{ 
       "ch":"113", 
       "ipaddr":"172.16.11.130", 
       "hostname":"TMC-R.PRM03", 
       "posisi":"8", 
       "monitorid":"17", 
       "view_dimension":"2*2", 
       "input_ipaddr":"" 
      }{ 
       "ch":"114", 
       "ipaddr":"172.16.11.131", 
       "hostname":"TMC-R.PRM02", 
       "posisi":"7", 
       "monitorid":"17", 
       "view_dimension":"2*2", 
       "input_ipaddr":"" 
      }{ 
       "ch":"115", 
       "ipaddr":"172.16.11.132", 
       "hostname":"TMC-R.PRM04", 
       "posisi":"9", 
       "monitorid":"17", 
       "view_dimension":"2*2", 
       "input_ipaddr":"" 
      }'; 

$render = renderLayout3x3($json_data); 
print $render; ?> 

輸出總是:

Output : "2","1","3","4","5","6","7","8","9" 

爲什麼:2 - 1 - 3 - 等,而不是1 - 2 - 3 - 等

這是其他輸出: output iteration

+0

的期望是什麼O/P – webpic

+0

向我們展示你的原生JSON結構。 – Script47

+0

你生JSON在2-1-3的posisi ......爲了這就是爲什麼 –

回答

0

這是因爲如果你的代碼中的語句不能決定你輸出的序列應該是什麼。

您可以使用usort重新安排這樣的你的$的數據,

usort(&$data, function($a, $b){return $a['posisi'] <=> $b['posisi'];}); 
+1

'usort($數據,功能($一個,$ B){ \t \t \t返回$ A [ 'posisi'] - $ B [ 'posisi']; \t \t});'爲PHP 5.3 – ikwijaya

0

你有你的排序數組,那麼你可以得到數組排序列表。你可以使用kso​​rt()函數將重點

+0

使用kso​​rt,因爲它是不是應該被排序的關鍵就沒有真正解決這個問題。像Kris Roofe的回答中使用usort是更好的方法。 – Sondre

0

第一那是你的字符串錯誤的JSON格式整理您的陣列。 如果你的JSON格式是正確的,然後就去做usort被定義在此之後

public function renderLayout3x3($data=array()){ 
    $data = json_decode($data); // decode json format to array 

    // set posisi as index 
    foreach ($data as $key => $value) 
    { 
     $data[intval($value['posisi'])] = $value; 
    } 
    // sort index 
    ksort($data); 
    // get array values to data 
    $data = array_values($data); 

    $output = ""; 

    foreach ($data as $key => $value) { 
     $output .= '<li><ul> 
         <li>POS:'.$value["posisi"].'</li> 
         <li>HOSTNAME:'.$value["hostname"].'</li> 
        </ul></li>'; 
    } 
    return "<ul>$output</ul>"; 
}