मेरे पास एक PHP सरणी है जिसमें 2-5 आइटम हैं।
$z=["itema", "itemb", "itemc", "itemd","iteme"];
मुझे सरणी के माध्यम से जाने और प्रत्येक आइटम को एक-दूसरे के खिलाफ एक बार मैच करने का एक तरीका होना चाहिए। तो आउटपुट जैसा लगेगा
itema vs itemb
itema vs itemc
itema vs itemd
itema vs iteme
itemb vs itemc
itemb vs itemd
itemb vs iteme
itemc vs itemd...ect
मैं हर आइटम को हिट करने के लिए लूप प्राप्त नहीं कर सकता। मुझे लगता है कि यह लूप में एक लूप होना है क्योंकि मेरा सिर्फ एक लूप काम नहीं करता है।
और इसे केवल एक ही बार जाना है। मैं इस पर काम करने के लिए कैसे खो गया हूँ। कोई भी सहायताकाफी प्रशंसनीय होगी।
4 जवाब
आप दो छोरों के लिए उपयोग कर सकते हैं
$count = count($z);
for ($i = 0; $i < $count - 1; $i++) {
for ($j = $i + 1; $j < $count; $j++) {
// compare $z[$i] with $z[$j]...
}
}
अन्य लूप 0 से n - 2 तक जाता है और आंतरिक लूप बाहरी मान से प्रारंभिक के रूप में मूल्य लेता है और अंत में जाता है।
यदि आपको भी साहचर्य सरणियों को संभालने की आवश्यकता है, जैसे कि एक टिप्पणीकार ने उल्लेख किया है, तो आप इस मामले को संभालने के लिए array_values
(और array_keys
) का उपयोग कर सकते हैं।
$values = array_values($z);
$keys = array_keys($z); // optional - only used, if you need the keys..
$count = count($values);
for ($i = 0; $i < $count - 1; $i++) {
for ($j = $i + 1; $j < $count; $j++) {
// compare $values[$i] with $values[$j]...
// or $keys[$i] with $keys[$j];
}
}
नोट: A
foreach
लूप किसी भी स्थिति में काम नहीं करेगा, क्योंकि आप नहीं कर सकते आंतरिक लूप को सभी मूल्यों को छोड़ देने के लिए कहा, पहले से ही देखा पाश । औरforeach
लूप सिखाने से इस व्यवहार का परिणाम होगाforeach
, वह प्रभावशाली एक सरलfor
लूप और धीमा जैसा दिखता है।foreach
का उपयोग करने में कोई लाभ नहीं है।
परीक्षण नहीं, लेकिन कुछ इस तरह:
foreach($z as $item){
foreach($z as $item2){
if($item!=$item2){
echo $item . ' vs ' . $item2;
}
}
}
<?php
$z=["itema", "itemb", "itemc", "itemd","iteme"];
$sizeZ=count($z);
for ($i = 0; $i < $sizeZ-1; $i++)
{
for ($j = $i+1; $j < $sizeZ; $j++)
{
echo $z[$i]." vs ".$z[$j]."<br>";
}
}
?>
आउटपुट:
itema vs itemb
itema vs itemc
itema vs itemd
itema vs iteme
itemb vs itemc
itemb vs itemd
itemb vs iteme
itemc vs itemd
itemc vs iteme
itemd vs iteme
मेरे विचार में foreach()
तब {a {X1}} का उपयोग करना बेहतर है।
foreach()
के साथ दृष्टिकोण मुझे साफ दिखता है। for()
के साथ दृष्टिकोण गलत नहीं है, लेकिन यह अजीब है।
एक foreach
उदाहरण देखें:
$z = array('xxApple' => "itema", 'B' => "itemb", 'C' => "itemc", 'D' => "itemd", 'AAAA' => "iteme");
//$z = array("itema", "itemb", "itemc", "itemd", "iteme"); // works also with this array
$x = array_values($z);
$y = array_keys($z); // Optional
foreach($x as $key1 => $item){
foreach($x as $key2 => $item2){
if($key2 <= $key1){
continue;
}
if($item == $item2){
continue;
}
echo $item . ' vs ' . $item2 . '<br>';
// echo $y[$key1] . ' vs ' . $y[$key2] . '<br>'; // Optional
}
}
//OUTPUT
itema vs itemb
itema vs itemc
itema vs itemd
itema vs iteme
itemb vs itemc
itemb vs itemd
itemb vs iteme
itemc vs itemd
itemc vs iteme
itemd vs iteme
यहाँ बेंचमार्क परिणाम हैं:
बेंचमार्क # 1
$z = range(0,20000);
$start = time();
$values = array_values($z);
for ($i = 0; $i < count($values) - 1; $i++) {
for ($j = $i + 1; $j < count($values); $j++) {
}
}
$end = time();
$elapsedTimeA = $end - $start;
// Case A, elapsed time in seconds: 275
echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
$start = time();
$x = array_values($z);
foreach($x as $key1 => $item){
foreach($x as $key2 => $item2){
if($key2 <= $key1){
continue;
}
if($item == $item2){
continue;
}
}
}
$end = time();
$elapsedTimeB = $end - $start;
// Case B, elapsed time in seconds: 103
echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
बेंचमार्क # 2
$z = range(0,20000);
$start = time();
$values = array_values($z);
$count = count($values);
for ($i = 0; $i < $count - 1; $i++) {
for ($j = $i + 1; $j < $count; $j++) {
}
}
$end = time();
$elapsedTimeA = $end - $start;
// Case A, elapsed time in seconds: 17
echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
$start = time();
$x = array_values($z);
foreach($x as $key1 => $item){
foreach($x as $key2 => $item2){
if($key2 <= $key1){
continue;
}
if($item == $item2){
continue;
}
}
}
$end = time();
$elapsedTimeB = $end - $start;
// Case B, elapsed time in seconds: 103
echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
नए सवाल
php
PHP एक व्यापक रूप से उपयोग किया जाता है, उच्च-स्तरीय, गतिशील, वस्तु-उन्मुख, और व्याख्या की गई स्क्रिप्टिंग भाषा मुख्य रूप से सर्वर-साइड वेब विकास के लिए डिज़ाइन की गई है। PHP भाषा के बारे में सवालों के लिए इस्तेमाल किया।