2012-02-25 12 views
8

मैं एक सरणी पर एक खोज और सभी मान जब मिलान हो जाता है की तरह मिल गया। कुंजी [name] सरणी में मैं पर एक खोज कर रहा हूँ क्या है।खोजें सरणी और सभी कुंजियों और मानों लौट जब मैच

Array (
[0] => Array 
    (
     [id] => 20120100 
     [link] => www.janedoe.com 
     [name] => Jane Doe 
    ) 
[1] => Array 
    (
     [id] => 20120101 
     [link] => www.johndoe.com 
     [name] => John Doe 
    ) 
) 

अगर मैं जॉन डो के लिए एक खोज किया था यह वापसी होगी।

Array 
(
    [id] => 20120101 
    [link] => www.johndoe.com 
    [name] => John Doe 
) 

क्या मैं खोज रहा हूं के आधार पर सरणी का नाम बदलना आसान होगा। उपर्युक्त सरणी के बजाय मैं निम्नलिखित भी उत्पन्न कर सकता हूं।

Array (
[Jane Doe] => Array 
    (
     [id] => 20120100 
     [link] => www.janedoe.com 
     [name] => Jane Doe 
    ) 
[John Doe] => Array 
    (
     [id] => 20120101 
     [link] => www.johndoe.com 
     [name] => John Doe 
    ) 
) 
+0

की तलाश नहीं कर रहे हैं यदि आप के नाम का इस्तेमाल आप डुप्लिकेट चाबी होने का मौका चलाने अपनी चाबियों के लिए। – BenOfTheNorth

+0

से मैं दूसरे विचार को अनदेखा करूँगा और केवल पहली सरणी खोजूंगा। – Tim

उत्तर

6
$filteredArray = 
array_filter($array, function($element) use($searchFor){ 
    return isset($element['name']) && $element['name'] == $searchFor; 
}); 

पीएचपी 5.3.x

+0

लघु और तेज़ और लागू करने में आसान था। ठीक वही जो मेरे द्वारा खोजा जा रहा था। बहुत बहुत धन्यवाद! – Tim

1
function search_array($array, $name){ 
    foreach($array as $item){ 
     if (is_array($item) && isset($item['name'])){ 
      if ($item['name'] == $name){ // or other string comparison 
       return $item; 
      } 
     } 
    } 
    return FALSE; // or whatever else you'd like 
} 
+0

वहां पहले से ही है एक अंतर्निहित समारोह 'array_search', http://docs.php.net/array_search ->' गंभीर त्रुटि:() array_search redeclare नहीं कर सकता ' – VolkerK

+1

मेरा बुरा, बस इसे नाम कुछ और ... – scibuff

1

मैं scibuff के जवाब (जो उत्कृष्ट था) के लिए एक वैकल्पिक परिवर्तन की पेशकश करना चाहते हैं की आवश्यकता है। आप एक सटीक मिलान, लेकिन सरणी के अंदर एक स्ट्रिंग ...

function array_search_x($array, $name){ 
    foreach($array as $item){ 
     if (is_array($item) && isset($item['name'])){ 
      if (strpos($item['name'], $name) !== false) { // changed this line 
       return $item; 
      } 
     } 
    } 
    return FALSE; // or whatever else you'd like 
} 

के साथ इस कॉल ...

$pc_ct = array_search_x($your_array_name, 'your_string_here'); 
संबंधित मुद्दे