2013-01-13 95 views
-2

我正在處理將對象轉換爲字符串的小函數。如果對象具有值作爲數組很容易。但我希望這個函數能夠工作,即使我的對象或數組有一些值作爲另一個對象或數組。我讓它變得非常粗糙,所以專家們請幫助它使它爲每個人整理。從對象到人類可讀文本

我的功能:

function makeString($array) 
{ 
    $outval = ""; 
    foreach($array as $key=>$value) { 
     if (is_object($value)) { 
      $arr = array(); 
      $arr = get_object_vars($value); 

      foreach($arr as $key1=>$value1){ 
       if(is_array($value1)) { 
        $outval .= "\t\t$key1\n"; 
        $outval .= makeString($value1); 
       } 
       else { 
        $outval .= "\t$key1: $value1\n"; 
       } 

      } 
     } 
     if(is_array($value)) { 
      $outval .= "\t$key\n"; 
      $outval .= makeString($value); 
     } 
     else { 
      $outval .= "$key: $value\n"; 
     } 
    } 
    return $outval; 
} 

這部分是我的函數裏面反覆出現:

... 
    if (is_object($value)) { 
     $arr = array(); 
     $arr = get_object_vars($value); 

     foreach($arr as $key1=>$value1){ 
      if(is_array($value1)) { 
       $outval .= "\t\t$key1\n"; 
       $outval .= makeString($value1); 
      } 
      else { 
       $outval .= "\t$key1: $value1\n"; 
      } 

     } 
    } 
... 

如果這裏$ VALUE1也是一個對象?即使我的對象在主對象內有許多其他對象或數組,也應該怎麼做才能使此函數正常工作。

+0

爲什麼你會做到這一點,而不是僅僅使用json_encode?你也重新實現了一個內置函數:__toString – AD7six

+0

我剛剛嘗試過json_encode,但它返回了一些不能寫入文件的東西。謝謝你,但忘了它的朋友。人們認爲這不是一個常見問題。所以.. – Kemal

回答

1

你的函數有一個缺陷來自你的一個假設:函數將被傳遞一個數組。但是,正如你發現的那樣,這是不能保證的。

所以,更好的方式來設計這樣的功能是承擔任何關於輸入,並且調整你的功能是這樣的:

function makeString($value) { 
    if(is_object($value)) { } 
    else if(is_array($value)) { } 
    else if(is_string($value) || is_numeric($value)) { } 
    else { } // Resource, etc. 
} 
+0

好的,但我在使用Xen API時需要這個功能。它有一些變量作爲對象。我正在深入研究它,並且該變量還有另一個對象或數組作爲值。所以我需要一些能夠將整個對象轉換爲人類可讀文本的東西。 – Kemal

+0

這很棒,但你必須寫下來。沒有人會爲你編寫整個功能。我已經向您展示瞭如何重構函數以便它能夠工作,現在您必須進行遞歸併完成函數。 – nickb

+0

恩,謝謝!我剛看到互聯網上沒有這樣的需求樣本,如果我們可以在這裏放置精心設計的樣本,很多人都會使用它。這個粗略的功能已經適用於我。 – Kemal