2009-05-20 16 views
16
$items = (isset($_POST['items'])) ? $_POST['items'] : array(); 

मैं इस कोड के अंतिम टुकड़ा समझ में नहीं आता "? $_POST['items'] : array();"क्या करता है? ... : ... कर?

क्या कोड के संयोजन वास्तव में क्या करता है?

मैं इसे HTML टेक्स्ट बॉक्स से मूल्यों का एक समूह लेने और इसे सत्र सरणी में संग्रहीत करने के लिए उपयोग करता हूं। लेकिन समस्या यह है कि, यदि मैं टेक्स्ट बॉक्स में डेटा को पुनः सबमिट करने का प्रयास करता हूं तो नया सरणी सत्र पुराने सत्र सरणी को पूरी तरह खाली रिक्त स्थान और सभी को ओवरराइट करता है।

मैं केवल सरणी पहले से ही मान हैं कि में स्थानों अधिलेखित करना चाहते हैं। यदि उपयोगकर्ता केवल कुछ टेक्स्ट बॉक्स भरने का निर्णय लेता है, तो मैं नहीं चाहता कि पिछले सत्र सरणी डेटा रिक्त स्थान (खाली टेक्स्ट बॉक्स से) द्वारा अधिलेखित किया जाए।

मुझे लगता है कि उपरोक्त कोड समस्या है, लेकिन मुझे यकीन नहीं है कि यह कैसे काम करता है। कृपया मुझे प्रबुद्ध करें।

उत्तर

38

यह है एकternary operator:

अभिव्यक्ति (expr1) ? (expr2) : (expr3)expr2 का मूल्यांकन करता है, तो expr1TRUE को मूल्यांकन करती है और expr3 अगर expr1FALSE मूल्यांकन करता है।

+0

की तुलना में अधिक समझा जा सकता है यह * A * त्रिगुट ऑपरेटर और नहीं त्रिगुट ऑपरेटर बस के रूप में वहाँ कई द्विआधारी opreators (हैं +, -।, *, /, &&, || ।, ^, आदि) – Gumbo

+0

पीएचपी प्रलेखन कहा जाता है यह '': एक्स –

+1

यह आम तौर पर "सशर्त ऑपरेटर" आधिकारिक तौर पर सबसे अधिक भाषाओं में कहा जाता है, लेकिन अक्सर यह भी कहा जाता है * * त्रिगुट ऑपरेटर क्योंकि अधिकांश भाषाओं में, यह है केवल त्रिगुट ऑपरेटर। यह अच्छी तरह से हो सकता है कि जब पीएचपी बनाया गया था, वे "त्रिगुट ऑपरेटर" चुना आधिकारिक नाम के रूप में है, लेकिन मुझे यकीन है कि नहीं हूँ। – rmeador

17

कि अंतिम भाग सशर्त ऑपरेटर के रूप में जाना जाता है। असल में यह एक संघीय if/else कथन है।

यह इस तरह काम करता है:

$items = 
    // if this expression is true 
    (isset($_POST['items'])) 
    // then "$_POST['items']" is assigned to $items 
    ? $_POST['items'] 
    // else "array()" is assigned 
    : array(); 

इसके अलावा यहाँ कुछ छद्म कोड है कि आसान हो सकता है:

$items = (condition) ? value_if_condition_true : value_if_condition_false; 

संपादित करें: यहाँ है एक त्वरित, पंडिताऊ पक्ष नोट: PHP दस्तावेज़ इस ऑपरेटर को टर्नरी ऑपरेटर पर कॉल करता है। जबकि सशर्त ऑपरेटर तकनीकी रूप से एक टर्नरी ऑपरेटर (यानी, 3 ऑपरेंड वाले ऑपरेटर) है, यह टर्नरी ऑपरेटर को कॉल करने के लिए एक गलत नामक (और बल्कि अनुमानित) है।

+0

के लिए यह स्वीकार किए जाते हैं जवाब – Gokigooooks

0

असल में अगर $ _POST [ 'आइटम'] मौजूद है तो $ आइटम यह करने के लिए सेट हो जाता है अन्यथा यह एक खाली सरणी के लिए सेट हो जाता है।

+0

यह संभव आइटम सरणी से केवल विशिष्ट वस्तुओं स्टोर करने के लिए है या यह ओवरराइट करना है पूरे सरणी? – payling

0

यह एक टर्नरी ऑपरेटर है जो अनिवार्य रूप से कहता है कि आइटम कुंजी $ _POST में है, तो $ _POST ['आइटम्स'] के मान के बराबर $ आइटम सेट करें और इसे एक शून्य सरणी पर सेट करें। त्रिगुट ऑपरेटर को समझने के लिए पाओलो के जवाब में

if (isset($_POST['items']){ 
    $items = $_POST['items']; 
} else { 
    $items = array(); 
} 
1

यह रूप में ही है।

तुम क्या कर आप एक सत्र चर का उपयोग करना चाह सकते हैं पर देख रहे हैं ऐसा करने के लिए।

अपने पृष्ठ के शीर्ष पर डाल (क्योंकि आप पृष्ठ के लिए उत्पादन नहीं कुछ भी कर सकते हैं इससे पहले कि आप एक सत्र शुरू करते हैं। अर्थातकोई इको विवरण नहीं)

session_start(); 

फिर जब कोई उपयोगकर्ता आपका फॉर्म सबमिट करता है, तो परिणाम इस सर्वर चर में सहेजें। यदि यह पहली बार है कि उपयोगकर्ता ने फॉर्म सबमिट किया है, तो इसे सीधे सेव करें, अन्यथा चक्र से गुजरें और कोई भी वैल्यू जो खाली नहीं है उसे जोड़ें।

HTML कोड (testform.html):

<html> 
    <body> 
    <form name="someForm" action="process.php" method="POST"> 
     <input name="items[]" type="text"> 
     <input name="items[]" type="text"> 
     <input name="items[]" type="text"> 
     <input type="submit"> 
    </form> 
    </body> 
</html> 

प्रसंस्करण कोड (process.php):

<?php 
session_start(); 

if(!$_SESSION['items']) { 
    // If this is the first time the user submitted the form, 
    // set what they put in to the master list which is $_SESSION['items']. 
    $_SESSION['items'] = $_POST['items']; 
} 
else { 
    // If the user has submitted items before... 
    // Then we want to replace any fields they changed with the changed value 
    // and leave the blank ones with what they previously gave us. 
    foreach ($_POST['items'] as $key => $value) { 
     if ($value != '') { // So long as the field is not blank 
      $_SESSION['items'][$key] = $value; 
     } 
    } 
} 


// Displaying the array. 
foreach ($_SESSION['items'] as $k => $v) { 
    echo $v,'<br>'; 
} 
?> 
0

मैं समझ यह भी ध्यान देने योग्य है कि अगर यह है कि आप क्या देख रहे हैं देखें

$one = $two ?: $three; 
$one = two() ?: three(); 

के लिए आशुलिपि है: ?: एक अलग ऑपरेटर, जहां यह है कि

$one = $two ? $two : $three; 
$one = two() ? two() : three(); 

कम लिखते के अलावा, क्रम लाभ यह है कि, two() की तरह एक समारोह का उपयोग कर अगर, समारोह केवल एक बार आशुलिपि प्रपत्र का उपयोग कर मूल्यांकन किया जा सकता है, लेकिन संभवतः दो बार लंबे प्रपत्र का उपयोग कर रहा है।

0

हाँ ... यह त्रिगुट ऑपरेटर

एक सरल और स्पष्ट विवरण here, जिसमें लेखक ने कहा कि यह जवाब देने की तरह है प्रदान की है: "ठीक है, यह सच है"

पेट के दो संभावित मान (या) अलग करती है। परीक्षण अभिव्यक्ति सत्य होने पर पहला मान चुना जाएगा। दूसरा (कोलन के पीछे) चुना जाएगा यदि पहला जवाब गलत है।

त्रिगुट ऑपरेटर php 7.x में चर बनाने में बहुत मददगार, नोटिस चेतावनी से मुक्त। उदाहरण के लिए "

$mod = isset($_REQUEST['mod']) ? $_REQUEST['mod'] : ""; 
+0

इसके बजाय साइट को जोड़ने की, पृष्ठों की सामग्री का एक संक्षिप्त सारांश शामिल करें। वे पृष्ठों स्थान बाद में बदलते हैं तो इस सवाल का जवाब नहीं बहुत उपयोगी हो जाएगा। – davelupt

+0

davelupt, 'संक्षिप्त सारांश' सुझाव के लिए धन्यवाद। मैंने इसे जोड़ा – Cholis

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