2015-08-11 9 views
6

हाय मैं PHP के लिए नया हूँ, लेकिन अब तक मेरी जरूरतों के मामले में इस पाने में कामयाब रहे है का केवल एक भाग को प्रदर्शित करने की जरूरत है। मैंने ऑब्जेक्ट $Results कहा है।मैं एक JSON इनकोडिंग वस्तु

मैं सफलतापूर्वक var_dump ($Results); का उपयोग और उसके बाद पूर्ण परिणाम प्राप्त कर सकते इस प्रकार है: समस्या

<html> 
<form id="client-details" action="/details.php" method="post"> 
    <table> 
    <thead> 
     <tr> 
      <th>First Name</th> 
      <th>Surname</th> 
      <th>Search</th> 
     </tr> 
    </thead> 
<?php foreach($Results as $o):?> 
<tr> 
    <td id="forename"><?= $o->forename_1 ?></td> 
    <td id="surname"><?= $o->surname_1 ?></td> 
    <td><button type="submit" >More Info</button></td> 
</tr> 
<?php endforeach; ?> 
</table></form> 
</html> 

यहाँ:

object(stdClass)[2] 
    public '0' => 
    object(stdClass)[3] 
     public 'forename_1' => string 'JAMES' (length=5) 
     public 'middle1_1' => string '' (length=0) 
     public 'middle2_1' => string '' (length=0) 
     public 'middle3_1' => string '' (length=0) 
     public 'surname_1' => string 'TURNER' (length=7)  
    public 'Status' => int 100 

मैं तो यह एक तालिका में निम्नलिखित कोड का उपयोग कर सम्मिलित जब मैं परिणाम प्रदर्शित करता हूं तो मुझे निम्न त्रुटि मिलती है: "नोटिस: गैर-ऑब्जेक्ट की संपत्ति प्राप्त करने का प्रयास .."

ऐसा लगता है क्योंकि मैं ऑब्जेक्ट के public 'Status' => int 100 भाग को चलाने की कोशिश कर रहा हूं।

तो मेरा प्रश्न है: मैं या तो 'स्थिति' को पॉप्युलेट करने की कोशिश करने से तालिका को कैसे रोकूं या मैं इसे पूरी तरह से अनदेखा कैसे करूं?

संपादित करें: अगर मैं मैं करना चाहता था एक साहचर्य सरणी के रूप में के बजाय के रूप में वस्तुओं ... यह मेरे 'स्थिति' सरणी/वस्तु की अनदेखी करने में मदद मिलेगी की json_decode से परिणाम प्राप्त कर सकते हैं?

+0

जब आप अपने परिणाम प्राप्त करते हैं तो कोड देखें – wilson

+0

आपकी 'var_dump' बस '$ परिणाम' पर एक और ऑब्जेक्ट दिखाता है ताकि आप इस –

+0

@ विल्सन की तरह एक्सेस न कर सकें - मैंने परिणामों को प्राप्त करते समय कोड की जांच की: '$ परिणाम = json_decode ($ परिणाम); 'मैं जो भी कर सकता हूं वह JSON को एक सहयोगी सरणी के रूप में' $ परिणाम = json_decode ($ परिणाम, सत्य) कहकर वापस कर सकता है;'? – BLev80

उत्तर

3

मुझे लगता है कि आपको यह गलत लगता है। आप जो कर रहे हैं वह ऑब्जेक्ट के सभी चरों के माध्यम से पुनरावृत्त है, यानी आपको पहले सार्वजनिक चर 0 (जो एक ऑब्जेक्ट भी है) प्राप्त होता है और तह के दूसरे भाग में फोरच में आपको वैरिएबल स्थिति मिलती है और क्योंकि 'स्थिति' का मान मिलता है int है और 'forename_1' नाम की कोई संपत्ति नहीं है और इसलिए आपको यह त्रुटि मिलती है कि संपत्ति मौजूद नहीं है।

object(stdClass)[2] 
    public 'list' => 
    array(0 => 
     object(stdClass)[3] 
      public 'forename_1' => string 'JAMES' (length=5) 
      public 'middle1_1' => string '' (length=0) 
      public 'middle2_1' => string '' (length=0) 
      public 'middle3_1' => string '' (length=0) 
      public 'surname_1' => string 'TURNER' (length=7)  
      public 'Status' => int 100, 
     1 => 
     object(stdClass)[3] 
      public 'forename_1' => string 'JAMES' (length=5) 
      public 'middle1_1' => string '' (length=0) 
      public 'middle2_1' => string '' (length=0) 
      public 'middle3_1' => string '' (length=0) 
      public 'surname_1' => string 'TURNER' (length=7)  
      public 'Status' => int 100, 
     2 => 
     object(stdClass)[3] 
      public 'forename_1' => string 'JAMES' (length=5) 
      public 'middle1_1' => string '' (length=0) 
      public 'middle2_1' => string '' (length=0) 
      public 'middle3_1' => string '' (length=0) 
      public 'surname_1' => string 'TURNER' (length=7)  
      public 'Status' => int 100 
    ) 

संपादित करें:

यह आपके JSON ऑब्जेक्ट की संरचना को बदलने के लिए ताकि आप लोगों को आप प्रदर्शित करना चाहते हैं, जैसे की सूची सोचा पुनरावृति कर सकते हैं काम करने के लिए आप वास्तव में चाहते हैं यदि आप डेटा संरचना को बदलने में असमर्थ हैं या नहीं चाहते हैं तो फ़ंक्शन कॉल json_decode का परिणाम एक सहयोगी सरणी के रूप में प्राप्त करें और फ़ोरैच स्टेटमेंट में आप देखें कि आवश्यक फ़ील्ड मौजूद है या नहीं:

$Result = json_decode($data, true); 

<?php foreach($Results as $o):?> 
    <?php if(isset($o['forename_1']) && isset($o['surname_1'])): ?> 
     <tr> 
      <td id="forename"><?= $o['forename_1'] ?></td> 
      <td id="surname"><?= $o['surname_1'] ?></td> 
      <td><button type="submit" >More Info</button></td> 
     </tr> 
    <?php endif; ?> 
<?php endforeach; ?> 
+0

यह एक बहुत ही उपयोगी टिप्पणी है! मेरे विशिष्ट उदाहरण में, मैं यह नहीं कर सकता हालांकि :(--- मुझे ऑब्जेक्ट सीधे आपूर्तिकर्ताओं webservice से मिलता है और मैं उनका उपयोग करने से पहले किसी भी डेटा या परिणामों को पुनर्निर्माण नहीं करना चाहता हूं। – BLev80

0

इस प्रयास करें: इस तरह मुद्रित करने के लिए

<html> 
    <form id="client-details" action="/details.php" method="post"> 
     <table> 
     <thead> 
      <tr> 
       <th>First Name</th> 
       <th>Surname</th> 
       <th>Search</th> 
      </tr> 
     </thead> 
    <?php foreach($Results as $o=>$v){?> 
    <tr> 
     <td id="forename"><?= $v->forename_1 ?></td> 
     <td id="surname"><?= $v->surname_1 ?></td> 
     <td><button type="submit" >More Info</button></td> 
    </tr> 
    <?php } ?> 
    </table></form> 
    </html> 
+0

मैंने कोशिश की - कोई भाग्य नहीं - 'स्थिति ' – BLev80

0

प्रयास करें:

<?php foreach($Results as $o):?> 
<tr> 
    <td id="forename"><?= $o['forename_1']; ?></td> 
    <td id="surname"><?= $o['surname_1'] ?></td> 
    <td><button type="submit" >More Info</button></td> 
</tr> 
<?php endforeach; ?> 
1

मैं एक स्वीकार्य समाधान मिल गया! मेरी json_decode लाइन के अंदर true जोड़कर:

$Results = json_decode($serviceResponse, true); 

मैं एक साहचर्य सरणी के बजाय एक वस्तु के रूप परिणाम लौटने।

<html> 
.... (rest of code here) 
<?php foreach($Results as $person):?> 
     <tr> 
      <td id="forename"><?= $person['forename_1'] ?></td> 
      <td id="surname"><?= $person['surname_1'] ?></td> 
      <td><button type="submit" >More Info</button></td> 
     </tr> 
<?php endforeach; ?> 
    </table> 
    </form> 
</html> 

तो अब क्या होता है कि अंतिम पंक्ति 'status' जो एक त्रुटि लौट रहा था अब सिर्फ एक रिक्त पंक्ति है:

मैं तो इस प्रकार प्रत्येक <tr> अंदर कोड बदल दिया है। हालांकि यह एक सही समाधान नहीं है, लेकिन जब मैं HTML को HTML के रूप में देखता हूं तो मुझे खाली तालिका पंक्ति से निपटने में कोई फर्क नहीं पड़ता।

+0

को पुन: प्रयास करने की कोशिश करता रहता है यदि आप कथन के साथ इसे बाईपास कर सकते हैं: "अगर (जारीकर्ता ($ व्यक्ति [' forename_1 ']) && isset ($ person [' surname_1 ']))" फिर पंक्ति प्रदर्शित करें, अन्यथा कुछ भी न करें –

+0

मैंने कोशिश की - काम नहीं किया ... शायद मैं गलत जगह पर कोड डाल रहा था .. मैं यहाँ सीख रहा हूं;) – BLev80

+0

मैंने अपनी पिछली पोस्ट संपादित की है ... देखें कि क्या यह आपकी मदद करता है ... –

संबंधित मुद्दे