PHP में एक सरणी का सूचकांक मूल्य प्राप्त करें


86

मेरे पास एक सरणी है:

$list = array('string1', 'string2', 'string3');

मैं किसी दिए गए मूल्य के लिए सूचकांक प्राप्त करना चाहता हूं (यानी के 1लिए string2और इसके 2लिए string3)

मैं चाहता हूं कि यह सरणी में तारों की स्थिति है

  • string1 0 है
  • string2 1 है
  • string3 2 है

इसे कैसे प्राप्त किया जाए?


7
मेरे एक तकनीकी लेखक मित्र ने मुझसे कहा: "जब तक आप सही प्रश्न नहीं पूछेंगे, आपको सही उत्तर नहीं मिलेंगे।"
बिल कारविन

यह पुराना है .... लेकिन मैं यह जानना चाहता हूं कि: "मैंने
array_search

कृपया, उच्च श्रेणी के उत्तर को स्वीकृत के रूप में चिह्नित करें।
रोब्सच

यदि आपके पास एक सहयोगी सरणी है, जैसा कि मैंने किया था, तो यह उत्तर मदद करता है: stackoverflow.com/a/3365793/470749
रेयान

जवाबों:


157

array_search इसे करने का तरीका है।

array_search ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : mixed

से डॉक्स :

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;

आप मैन्युअल रूप से सरणी पर लूप कर सकते हैं और इंडेक्स पा सकते हैं लेकिन जब इसके लिए कोई फ़ंक्शन होता है तो ऐसा क्यों करते हैं। यह फ़ंक्शन हमेशा एक कुंजी देता है और यह साहचर्य और सामान्य सरणियों के साथ अच्छी तरह से काम करेगा।


10
यह कुंजी को लौटाता है, सूचकांक को नहीं। आपके उदाहरण में कुंजी आसानी से मूल्य का सूचकांक है।
जॉर्ज फेरेरा

1
@smink, ओपी की सरणी एक गैर-सहयोगी सरणी है, इसलिए यह ठीक काम करती है।
मैथ्यू फ्लैशेन

क्षमा करें, मैंने सरणी का प्रकार निर्दिष्ट नहीं किया है। मैं जिस सरणी का उपयोग करता हूं वह एक बहुआयामी सरणी है कृपया समाधान के लिए मेरा उत्तर देखें
आकाश चक्रवर्ती

मेरे पास इस प्रकार की सरणी है: [0 => {आईडी: 1, नाम: कुछ}, 1 => {.....}, ...]। क्या यह array_search ("नाम" => कुछ, $ सरणी) जैसी कुंजी / इंडेक्स ढूंढना संभव है?
lazzy_ms

कैसे के बारे में अगर सरणी में बच्चा है?
zukijuki

19

यदि आप उनमें से कुछ ही कर रहे हैं (और / या सरणी का आकार बड़ा है), तो आप array_sign के साथ सही रास्ते पर थे:

$list = array('string1', 'string2', 'string3');
$k = array_search('string2', $list); //$k = 1;

यदि आप सभी (या उनमें से बहुत) चाहते हैं, तो एक लूप आपको बेहतर प्रदर्शन करेगा:

foreach ($list as $key => $value) {
    echo $value . " in " . $key . ", ";
}
// Prints "string1 in 0, string2 in 1, string3 in 2, "

1
foreach मुझे क्या चाहिए
zzapper

11

अन्य लोगों ने सुझाव दिया है array_search()जो एरे तत्व की कुंजी देता है जहां मूल्य पाया जाता है। आप यह सुनिश्चित कर सकते हैं कि सरणी कुंजियों का उपयोग करके सन्निहित पूर्णांक हैं array_values():

$list = array(0=>'string1', 'foo'=>'string2', 42=>'string3');
$index = array_search('string2', array_values($list));
print "$index\n";

// result: 1

आपने अपने प्रश्न में कहा कि array_search()कोई फायदा नहीं था। क्या आप व्यख्या कर सकते हैं? आपने क्या प्रयास किया और यह आपकी आवश्यकताओं को कैसे पूरा नहीं किया?


"array_values ​​() कोई फायदा नहीं था" .. होना चाहिए "array_search () कोई फायदा नहीं था"
Vex

7

// या अपने सरणी संरचना पर विचार:

$array = array(
  'string1' => array('a' => '', 'b' => '', 'c' => ''),
  'string2' => array('a' => '', 'b' => '', 'c' => ''),
  'string3' => array('a' => '', 'b' => '', 'c' => ''),
);

// आप बस कर सकते हैं

function findIndexOfKey($key_to_index,$array){
  return array_search($key_to_index,array_keys($array));
}

// निष्पादित किया गया

print "\r\n//-- Method 1 --//\r\n";
print '#index of: string1 = '.findIndexofKey('string1',$array)."\r\n";
print '#index of: string2 = '.findIndexofKey('string2',$array)."\r\n";
print '#index of: string3 = '.findIndexofKey('string3',$array)."\r\n";

// वैकल्पिक रूप से

print "\r\n//-- Method 2 --//\r\n";
print '#index of: string1 = '.array_search('string1',array_keys($array))."\r\n";
print '#index of: string2 = '.array_search('string2',array_keys($array))."\r\n";
print '#index of: string3 = '.array_search('string3',array_keys($array))."\r\n";

// पुनरावर्ती

print "\r\n//-- Method 3 --//\r\n";
foreach(array_keys($array) as $key => $value){
  print '#index of: '.$value.' = '.$key."\r\n";
}

// आउटपुट

//-- Method 1 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2

//-- Method 2 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2

//-- Method 3 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2

6

समस्या यह है कि आपके पास अपने सरणी पर एक संख्यात्मक सूचकांक नहीं है।
Array_values ​​() का उपयोग करने से एक शून्य अनुक्रमित सरणी बन जाएगी जिसे आप लूप के लिए उपयोग करने की आवश्यकता को दरकिनार करके array_search () का उपयोग करके खोज कर सकते हैं।

$list = array('string1', 'string2', 'string3');
$index = array_search('string2',array_values($list));

यह सवाल के लिए अब तक का सबसे छोटा और काम किया गया तरीका है,
टोनी टेगर साहिदी

1

क्या आपके द्वारा कुछ अधिक विशिष्ट हुआ जा सकता है?

$key = array_search('string2',$list)

मेरे लिए ठीक काम करता है। क्या आप कुछ अधिक जटिल पूरा करने की कोशिश कर रहे हैं?


1

इस कोड को आपकी नई दिनचर्या के समान होना चाहिए, सही बहु-आयामी सरणी के साथ काम करना।

 $arr = array(
  'string1' => array('a' => '', 'b' => '', 'c' => ''),
  'string2' => array('a' => '', 'b' => '', 'c' => ''),
  'string3' => array('a' => '', 'b' => '', 'c' => '')
 );

 echo 'Index of "string2" = '. array_search('string2', array_keys($arr));

1
प्रश्न में बहु-आयामी सरणियों के बारे में कुछ भी उल्लेख नहीं किया गया है (अन्य उत्तरों में ओपी द्वारा टिप्पणी से पता चलता है कि यह उत्तर वह है जो वह वास्तव में देख रहा था, लेकिन यदि आप केवल मूल प्रश्न और इस उत्तर को पढ़ते हैं, तो आप जो कह रहे हैं उसका कोई मतलब नहीं है)
स्टबबोर्नशूगुय

1

आपको इसके लिए एक फंक्शन बनाना होगा। मुझे नहीं लगता कि उस उद्देश्य के लिए कोई अंतर्निहित कार्य है। सभी PHP सरणियों डिफ़ॉल्ट रूप से सहयोगी हैं। इसलिए, यदि आप उनकी कुंजियों के बारे में अनिश्चित हैं, तो यहां कोड है:

<?php

$given_array = array('Monday' => 'boring',
'Friday' => 'yay',
'boring',
'Sunday' => 'fun',
7 => 'boring',
'Saturday' => 'yay fun',
'Wednesday' => 'boring',
'my life' => 'boring');

$repeating_value = "boring";

function array_value_positions($array, $value){
    $index = 0;
    $value_array = array();
        foreach($array as $v){
            if($value == $v){
                $value_array[$index] = $value;
            }
        $index++;
        }
    return $value_array;
}

$value_array = array_value_positions($given_array, $repeating_value);

$result = "The value '$value_array[0]' was found at these indices in the given array: ";

$key_string = implode(', ',array_keys($value_array));

echo $result . $key_string . "\n";//Output: The value 'boring' was found at these indices in the given array: 0, 2, 4, 6, 7


0

Array_keys PHP फ़ंक्शन का प्रयास करें।

$key_string1 = array_keys($list, 'string1');

क्या उन मापदंडों को उलटा नहीं किया गया है ?
ashleedawg

@ashleedawg आपके द्वारा गलत नहीं किया गया है, array_keysएक अलग हैarray_search
एक मित्र

0

array_search को ठीक काम करना चाहिए, बस यह परीक्षण किया है और यह उम्मीद के मुताबिक चाबियाँ लौटाता है:

$list = array('string1', 'string2', 'string3');
echo "Key = ".array_search('string1', $list);
echo " Key = ".array_search('string2', $list);
echo " Key = ".array_search('string3', $list);

या सूचकांक के लिए, आप उपयोग कर सकते हैं

$list = array('string1', 'string2', 'string3');
echo "Index = ".array_search('string1', array_merge($list));
echo " Index = ".array_search('string2', array_merge($list));
echo " Index = ".array_search('string3', array_merge($list));

0
$find="Topsite";
$list=array("Tope","Ajayi","Topsite","Infotech");
$list_count=count($list);
sort($list);
for($i=0;$i<$list_count;$i++)
{
    if($list[$i]==$find){
         $position=$i;
    }

}
echo $position;

-1

यहां एक फ़ंक्शन है जो संख्यात्मक या स्ट्रिंग सूचकांकों के लिए काम करेगा। सरणी को पहले पैरामीटर के रूप में पास करें, फिर उस तत्व के सूचकांक जिसे स्थानांतरित करने की आवश्यकता है और अंत में तत्व को ऊपर और 1 को स्थानांतरित करने के लिए दिशा को -1 पर सेट करें। उदाहरण: हटो (['पहला ’=> Move पीटर’,' दूसरा ’=>, पॉल’, 'तीसरा ’=>, केट’],' दूसरा ’, - 1) पॉल ऊपर जाएगा और पीटर नीचे।

function Move($a,$element,$direction)
{

$temp = [];
$index = 0;

foreach($a as $key=>$value)
{
    $temp[$index++] = $key;
}

$index = array_search($element,$temp);

$newpos = $index+$direction;

if(isset($temp[$newpos]))
{
        $value2 = $temp[$newpos];
        $temp[$newpos]=$element;
        $temp[$index]=$value2;
}
else
{
    # move is not possible
    return $a; # returns the array unchanged
}   

$final = [];

foreach($temp as $next)
{
    $final[$next]=$a[$next];
}

return $final;

}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.