2010-05-19 3 views
8

मैं इस सरल है पाश एक सरणी प्रतिध्वनित करने के लिए के लिए:PHP: अंतिम को छोड़कर प्रत्येक तत्व के बाद अल्पविराम प्रदर्शित करें। बयान 'के लिए' का उपयोग करना है और कोई 'फटना/विस्फोट'

for ($i = 0; $i < count($director); $i++) { 
    echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>'; 
} 

समस्या यहाँ जाता है कि जब एक से अधिक तत्व तो सरणी में है मैं सब कुछ मिलता है के बीच किसी भी जगह के बिना गूंज। मैं पिछले तत्व को छोड़कर प्रत्येक तत्व को अल्पविराम से अलग करना चाहता हूं।

मैं implode उपयोग नहीं कर सकते तो मैं एक और समाधान

+1

टॉम हैग के जवाब काम करना चाहिए है। या बस अपने परिणामी स्ट्रिंग से अंतिम अक्षर हटा दें (लेकिन ऐसा कोई साफ तरीका नहीं हो सकता है;))। –

+0

@ सिलेंटगोस्ट: आपने इस होमवर्क को क्यों टैग किया? अगर कथन के कारण * मैं 'implode' * का उपयोग नहीं कर सकता: ओपी एक सरणी का उपयोग करता है ताकि उसे लूप की आवश्यकता हो। 'implode' केवल तभी काम करता है जब आपके पास पहले से ही "implode" के तत्वों की एक सरणी हो (निश्चित रूप से कोई एचटीएमएल की सूची उत्पन्न कर सकता है और फिर implode लेकिन यह मेरे लिए अनावश्यक लगता है)। –

+0

@ फ़ेलिक्स: हास्यास्पद स्थिति की वजह से इम्प्लोड – SilentGhost

उत्तर

13

यह काम करना चाहिए की तलाश में हूँ। यह बेहतर है कि मैं प्रत्येक लूप पुनरावृत्ति के बजाय count() पर कॉल करना चाहता हूं।

$count = count($director); 
for ($i = 0; $i < $count; $i++) { 
    echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>'; 

    if ($i < ($count - 1)) { 
     echo ', '; 
    } 
} 
+2

हर कोई हमेशा '$ i <($ count - 1) की जांच करके ऐसा करता है;'; क्या मैं एकमात्र व्यक्ति हूं जो मुख्य गूंज के ऊपर चेक को स्थानांतरित करता है और 'i i! = 0' के लिए चेक करता है? –

+0

@ माइकल मोरोज़: क्या वह आपको अभी भी पिछली कॉमा नहीं देगा? –

+3

नहीं, आप पीछे की ओर अग्रसर कॉमा जोड़ रहे हैं, लेकिन यह पहले छोड़ देता है ताकि आपको "सामान, सामान" न मिले। 'के लिए (...) {अगर ($ i! = 0) {echo", ";} गूंज" सामान ";}' –

0
$number = count($director); 
for ($i = 0; $i < $number; $i++) { 
    echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>'; 
    if($i < $number - 1){ 
     echo ', '; 
    } 
} 

ओह, मैं टॉम हैग से जबाब देखा नहीं था, हम व्यावहारिक रूप से एक ही साथ आया था।

0

इस तरह कुछ कैसे? आप लूप के बाहर एक चर में "गिनती ($ निदेशक)" के परिणाम को स्टोर करना चाहते हैं ताकि लूप चलाने पर हर बार संसाधनों को पुन: गणना करने की आवश्यकता न हो।

for($i=0; $i<count($director);$i++){ 
    echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>'; 
    if($i!=count($director)-1){echo ',';} 
} 
2

मेरे पसंदीदा तरीका:

$links = []; 
for ($i = 0; $i < count($director); $i++) { 
    $links[] = '<a href="person.php?id='.$director[$i]["id"].'">' . 
     $director[$i]["name"] . '</a>'; 
} 
echo implode(', ', $links); 

या

$output = ""; 
for ($i = 0; $i < count($director); $i++) { 
    if ($output) { 
    $output .= ", "; 
    } 
    $output .= '<a href="person.php?id='.$director[$i]["id"].'">' . 
     $director[$i]["name"].'</a>'; 
} 
echo $output; 
+0

मैं इसका भी उपयोग करता हूं! :-) अच्छा। – acm

4

तो मैं PHP वाक्य रचना सही ढंग से याद है, यह भी मदद कर सकता है:

$str = ""; 
for ($i = 0; $i < count($director); $i++) { 
    $str .= '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>, '; 
} 
$str = trim($str, ", "); 
+0

आप 'trim()' की बजाय 'rtrim()' भी कर सकते हैं, इसलिए आप निश्चित रूप से केवल पिछली कॉमा को पकड़ सकते हैं। – pinkgothic

0

खैर, foreachशामिल:-)

foreach ($director as $key => $person) { 
    if ($key !== 0) echo ', '; 
    echo '<a href="person.php?id='.urlencode($person['id']).'">'.$person['name'].'</a>'; 
} 
3

एक बेहतर समाधान पूरी तरह से लूपिंग से बचने के लिए है। मैंने स्पष्टता के लिए लिंक बनाने की अनदेखी की है। ध्यान दें कि मुझे विश्वास नहीं है कि इंपोड का उपयोग करने में असमर्थता एक शर्त है। मेरा मानना ​​है कि यह एक सरल कथन है, "मैं नहीं देख सकता कि यह काम इम्प्लोड का उपयोग करके कैसे किया जाए, इसलिए मैंने इसे इस तरह से किया।"

$last_entry = array_pop($director); 
if(count($director) > 0) { 
    echo implode(", ", $director) . " and " . $last_entry; 
} else { 
    echo $last_entry; 
} 
1
for ($i=0 ; $i < count($arr)-1 ; $i++) 
{ 
    echo ($arr[$i].","); 
} 
echo ($arr[count($arr)-1]); 
0
// RENAMED $director to $directors 

$links = ''; 
foreach ($directors AS $director) { 
    $links .= "<a href=\"person.php?id={director['id']}\">{$director['name']}</a>"; 
    if (true !== empty($links)) { 
     $links .= ', '; 
    } 
} 

echo $links; 
0
foreach ($strings as $string){ 
    $superstring .= $string . ', '; 
} 
$echostring = substr_replace($superstring ,"",-2); 
echo $echostring; 
0

यहाँ मेरी 2 लाइनों समाधान

// Create your Array 
$cities = Array("Rome", "Florence", "Venice"); 

// implode them 
$list = trim(implode (", ", $cities)) ; 
// remove last comma 
$list = substr ($list,0 ,strlen($list)); 

//check result 
die ($list); 
संबंधित मुद्दे