2011-10-08 23 views
20

array_search प्रयोग करने के लिए array_search का उपयोग कर सरलएक 1 आयामी सरणी में बहु आयामी सरणी

$array = array("apple", "banana", "cherry"); 
$searchValue = "cherry"; 
$key = array_search($searchValue, $array); 

echo $key; 

लेकिन एक बहु आयामी सरणी के बारे में कैसे है?

#RaceRecord 

    [CarID] [ColorID] [Position] 
[0] 1  1   3 
[1] 2  1   1 
[2] 3  2   4 
[3] 4  2   2 
[4] 5  3   5 
उदाहरण मैं कार जिसका स्थिति 1. मैं यह कैसे करुं है सूचकांक प्राप्त करना चाहते हैं के लिए

?

+3

एक "सहयोगी सरणी" और "बहुआयामी सरणी" दो अलग-अलग चीजें हैं। आपका उदाहरण एक बहुआयामी सरणी है जो एक धुरी को सहयोगी होने का होता है। – Amber

+0

ओह मुझे खेद है, मैं शीर्षक –

उत्तर

29
function find_car_with_position($cars, $position) { 
    foreach($cars as $index => $car) { 
     if($car['Position'] == $position) return $index; 
    } 
    return FALSE; 
} 
+2

+1 संपादित कर रहा हूं, लेकिन मुझे लगता है कि अधिक आसान समाधान होना चाहिए – diEcho

+1

क्षमा करें, क्या मुझे कुछ स्पष्टीकरण मिल सकता है? $ स्थिति मूल्य स्थिति का मूल्य है जबकि $ कार सरणी ही है? उत्तर –

+2

SikretMiseon के लिए धन्यवाद - हाँ। @diEcho - क्या आप "अधिक आसान" समाधान के बारे में सोच सकते हैं कि यह बहुत कार्यान्वयन-विशिष्ट नहीं होगा? – Amber

2

वास्तव में सभी सरणी कार्यों भी आयाम के लिए तैयार कर रहे हैं हमेशा array.You ध्यान रखें कि आप भी आयाम सरणी पर आवेदन कर रहे हैं में रखने की जरूरत।

function find_car_with_position($cars, $position) { 
    for($i=0;$i<count($cars);$i++){ 
     if(array_search($search_val, $cars[$i]) === false){ 
      // if value not found in array..... 
     } 
     else{ 
      // if value is found in array.... 
     } 
    } 
} 
+3

उम्मीद कर रहा था [पाश के लिए] में count' का प्रयोग न करें '(http://www.php.net/ करने का प्रयास कर रहा है मैनुअल/एन/कंट्रोल-स्ट्रक्चर.for.php) – machineaddict

5

मैं मूल रूप से 'recreated' underscore.js की खोज करता हूं जहां विधि मरने के लिए है।

समारोह:

function findWhere($array, $matching) { 
    foreach ($array as $item) { 
     $is_match = true; 
     foreach ($matching as $key => $value) { 

      if (is_object($item)) { 
       if (! isset($item->$key)) { 
        $is_match = false; 
        break; 
       } 
      } else { 
       if (! isset($item[$key])) { 
        $is_match = false; 
        break; 
       } 
      } 

      if (is_object($item)) { 
       if ($item->$key != $value) { 
        $is_match = false; 
        break; 
       } 
      } else { 
       if ($item[$key] != $value) { 
        $is_match = false; 
        break; 
       } 
      } 
     } 

     if ($is_match) { 
      return $item; 
     } 
    } 

    return false; 
} 

उदाहरण:

$cars = array(
    array('id' => 1, 'name' => 'Toyota'), 
    array('id' => 2, 'name' => 'Ford') 
); 

$car = findWhere($cars, array('id' => 1)); 

या

$car = findWhere($cars, array(
    'id' => 1, 
    'name' => 'Toyota' 
)); 

मुझे यकीन है कि इस विधि को आसानी से एलओसी को कम कर सकता हूँ। मैं थोड़ा थक गया हूँ। : पी

8

एक-लाइनर के लिए हुरेय!

$index = array_keys(array_filter($array, function($item){ return $item['property'] === 'whatever';}))[0]; 
+0

यह विशेष रूप से आसान था क्योंकि मैं उन सभी इंडेक्स की तलाश में था जिनमें मूल्य शामिल था, इसलिए मुझे बस इतना करना था कि अंत में '[0] 'ड्रॉप हो गया था। 'Array_search ('सुई', array_column ($ haystack, 'column_key')); 'विधि केवल पहले लौटाती है। – Ricca

+1

इस उत्तर के लिए धन्यवाद, यह एक पंक्ति में एक सही समाधान था, आपने मेरा दिन बचा लिया है। –

22

php 5.5.5 & बाद के संस्करणों में, आप इस

$array_subjected_to_search =array(
array(
     'name' => 'flash', 
     'type' => 'hero' 
    ), 

array(
     'name' => 'zoom', 
     'type' => 'villian' 
    ), 

array(
     'name' => 'snart', 
     'type' => 'antihero' 
    ) 
); 
$key = array_search('snart', array_column($array_subjected_to_search, 'name')); 
var_dump($array_subjected_to_search[$key]); 

काम कर नमूना कोशिश कर सकते हैं: http://sandbox.onlinephpfunctions.com/code/19385da11fe0614ef5f84f58b6dae80bd216fc01

array_column के बारे में प्रलेखन पाया जा सकता है here

+1

पूरी तरह से काम करता है। धन्यवाद! – AnkitK

+0

क्या हुआ अगर मैं खोज करने के लिए की जरूरत है, जहां नाम = 'snart' और प्रकार =' antihero' – Smith

+0

@Smith: उपयोग Loupax के जवाब और && – SRB

8

आप कोशिश कर सकते हैं यह

array_search(1, array_column($cars, 'position')); 
संबंधित मुद्दे