2012-02-14 17 views
7

पीएचपी बहुआयामी सरणी - मूल्य के लिए खोज और उप सरणी

$clusters = array(
"clustera" => array(
    '101', 
    '102', 
    '103', 
    '104' 
), 
"clusterb" => array(
    '201', 
    '202', 
    '203', 
    '204' 
), 
"clusterc" => array(
    '301', 
    '302', 
    '303', 
    '304' 
) 
); 

मैं एक सर्वर (जैसे 202) के लिए खोज और वापस पाने के लिए यह क्लस्टर है कैसे कर सकते हैं की तरह एक सरणी को देखते हुए मिल सकता है? यानी 202 के लिए खोज करें और प्रतिक्रिया "क्लस्टरब" है, मैंने array_search का उपयोग करने की कोशिश की लेकिन ऐसा लगता है कि केवल monodimensional arrays के लिए है? (यानी शिकायत है कि दूसरा तर्क गलत डेटाटाइप है यदि मैं इसे $ क्लस्टर देता हूं)

बहुत धन्यवाद!

उत्तर

10
$search=202; 

$cluster=false; 

foreach ($clusters as $n=>$c) 
    if (in_array($search, $c)) { 
    $cluster=$n; 
    break; 
    } 

echo $cluster; 
+0

में कुछ फंकी चलने के रूप में क्लस्टर की अपनी सरणी के रूप में परिभाषित किया जाना चाहिए। मान लीजिए कि आपने एक ब्रेस या कुछ एएफडीडी को याद किया है जिसे मैंने साफ करने की कोशिश की लेकिन इसे काम नहीं कर सका। \t \t \t $ खोज = $ सर्वर; \t \t \t $ क्लस्टर = झूठा; \t \t \t foreach ($ के रूप में $ समूहों एन => $ ग) { \t \t \t अगर (in_array ($ खोज, $ ग)) { \t \t \t $ क्लस्टर = $ n; \t \t \t ब्रेक; \t \t \t} \t \t \t} \t \t \t प्रिंट ("विधि 2 मिला:" $ क्लस्टर); – Seer

+0

बस मेरे कोड को चेक किया है, अपेक्षा के अनुसार काम करता है। आपका कोड अंतिम पंक्ति में गलत है, 'प्रिंट ("विधि 2 मिला:" $ क्लस्टर); 'प्रिंट होना चाहिए (" विधि 2 मिली: $ क्लस्टर ");' –

+0

बिलकुल सही ... लेकिन यहां तक ​​कि वह नहीं था मुद्दा .... मैं 202 के साथ परीक्षण कर रहा था जब वास्तव में मैंने निर्दोषों की रक्षा के लिए उदाहरण से असली सर्वर नाम छुपाया :) महान काम करता है! – Seer

0
function getCluster($val) { 
    foreach($clusters as $cluster_name => $cluster) { 
     if(in_array($val, $cluster)) return $cluster_name; 
    } 
    return false; 
} 
+0

हम्म मैं मिलता है "अमान्य तर्क foreach() के लिए आपूर्ति की" जो शर्म की बात है के रूप में ऐसा लगता है कि यह हो जाएगा मैं वास्तव में क्या जरूरत है :) – Seer

+0

$ समूहों की आवश्यकता होगी प्रश्न –

2
function array_multi_search($needle,$haystack){ 
foreach($haystack as $key=>$data){ 

if(in_array($needle,$data)) 
return $key; 
} 
} 
$key=array_multi_search(202,$clusters); 
echo $key; 
$array=$clusters[$key]; 

इस समारोह का उपयोग करें। यह $ हैस्टैक (क्लस्टर) के तत्काल बाल सरणी में $ सुई (202) की कुंजी देता है। परीक्षण नहीं किया है, इसलिए मुझे पता है कि अगर यह काम करता है

+0

यह कोई भी काम नहीं कर रहा है ... खाली आता है। मैंने जो परिवर्तन किया है वह फ़ंक्शन की सामग्री के चारों ओर ब्रेसिज़ फेंक रहा है। फ़ंक्शन array_multi_search ($ सुई, $ हैस्टैक) { \t foreach ($ key = $ $ डेटा के रूप में $ haystack) { \t \t अगर (in_array ($ सुई, $ डेटा)) $ कुंजी लौटाता है; \t} } – Seer

+0

टाइपो के बारे में खेद है। यह अब काम करता है। http://codepad.org/cnACdlFI –

+0

निश्चित रूप से करता है - धन्यवाद! – Seer

1
$arrIt = new RecursiveArrayIterator($cluster); 
$server = 202; 

foreach ($arrIt as $sub){ 
    if (in_array($server,$sub)){ 
     $clusterSubArr = $sub; 
     break; 
     } 
    } 

$clusterX = array_search($clusterSubArr, $cluster); 
संबंधित मुद्दे