2012-09-11 14 views
16

द्वारा खोज सहयोगी सरणी मैं फ़्लिकर्स एपीआई से कुछ JSON ला रहा हूं। मेरी समस्या यह है कि कैमरे के आधार पर एक्सिफ़ डेटा अलग-अलग क्रम में है। इसलिए, उदाहरण के लिए, नीचे कैमरा मॉडल प्राप्त करने के लिए मैं एक सरणी संख्या हार्ड कोड नहीं कर सकता। क्या PHP में एसोसिएटिव सरणी मानों को खोजने और मिलान करने वाले सरणी को वापस करने के तरीकों में कोई अंतर्निहित तरीका है? नीचे दिए गए मेरे उदाहरण में मैं [label] => Model खोजना चाहता हूं और [_content] => NIKON D5100 प्राप्त करना चाहता हूं।मूल्य

अगर आप मुझे विस्तृत करना चाहते हैं तो कृपया मुझे बताएं।

print_r($exif['photo']['exif']); 

परिणाम:

Array 
(
    [0] => Array 
     (
      [tagspace] => IFD0 
      [tagspaceid] => 0 
      [tag] => Make 
      [label] => Make 
      [raw] => Array 
       (
        [_content] => NIKON CORPORATION 
       ) 

     ) 

    [1] => Array 
     (
      [tagspace] => IFD0 
      [tagspaceid] => 0 
      [tag] => Model 
      [label] => Model 
      [raw] => Array 
       (
        [_content] => NIKON D5100 
       ) 

     ) 

    [2] => Array 
     (
      [tagspace] => IFD0 
      [tagspaceid] => 0 
      [tag] => XResolution 
      [label] => X-Resolution 
      [raw] => Array 
       (
        [_content] => 240 
       ) 

      [clean] => Array 
       (
        [_content] => 240 dpi 
       ) 

     ) 
+0

@ जोगन क्या आप कृपया इस https://stackoverflow.com/questions/44721195/php-how-do-i-apply-multiple-filtering-conditions-passed-as-an-array-of के साथ मेरी मदद कर सकते हैं -arrays? – Valay

उत्तर

15

मेरी जानकारी के लिए इस तरह का कोई कार्य है। array_search है, लेकिन यह वही नहीं करता जो आप चाहते हैं।

मुझे लगता है कि एक लूप स्वयं लिखना सबसे आसान तरीका होगा।

function search_exif($exif, $field) 
{ 
    foreach ($exif as $data) 
    { 
     if ($data['label'] == $field) 
      return $data['raw']['_content']; 
    } 
} 

$camera = search_exif($exif['photo']['exif'], 'model'); 
+2

सामान्य समाधान के लिए धन्यवाद होना चाहिए :-) – Johan

+1

हालांकि, मुझे लगता है कि 'इन' 'होना चाहिए। और फिर 'हटाया जाना चाहिए? – Johan

+2

@ जोहान। दरअसल, कई प्रोग्रामिंग भाषाओं का उपयोग करते समय, आप कभी-कभी उन्हें मिश्रण करते हैं। :) – GolezTrol

4

यह काफी लागू करने के लिए तुच्छ होगा:

$model = ''; 

foreach ($exif['photo']['exif'] as $data) { 
    if ($data['label'] == 'Model') { 
     $model = $data['raw']['_content']; 
     break; 
    } 
} 
+0

धन्यवाद, बस मुझे क्या चाहिए! – Johan

2
foreach($exif['photo']['exif'] as $row) { 
    foreach ($row as $k => $v) { 
     if ($k == "label" AND $v == "Model") 
      $needle[] = $row["raw"]; 
    } 
} 
print_r($needle); 
+0

अपना कोड संपादित करें: यह '$ सुई [] = $ पंक्ति ['कच्चे']' – diEcho

0

जहां तक ​​मुझे पता है, PHP में बहुआयामी सरणी के लिए अंतर्निहित खोज फ़ंक्शन नहीं है। यह केवल अनुक्रमित और सहयोगी सरणी के लिए है। इसलिए आपको अपना खुद का खोज फ़ंक्शन लिखना है !!

12

array_search ('मॉडल', array_map (समारोह ($ डेटा) {$ लौट डेटा [ 'लेबल'];}, $ exif))

+1

मुझे इस विधि को यहां सूचीबद्ध बाकी की तुलना में बहुत बेहतर पसंद है! इसका असली PHP, और पारंपरिक foreach विधि से व्यक्तिगत रूप से बहुत तेज़ है। किसी ने इसे बेंचमार्क किया! –

+0

क्या 'array_search' + 'array_map' बनाम लूप के प्रदर्शन के बारे में कोई सबूत है? – userlond

18
$key = array_search('model', array_column($data, 'label')); 

नवीनतम पीएचपी में, समारोह के ऊपर काम करेंगे।

+0

मुझे लगता है कि यह उत्तर सबसे कुशल समाधान है। – Behzadsh