2011-02-05 5 views
7

के अंदर मान को बंद करें, मैं टैब के साथ इंपोडिंग से पहले टैग को array_values ​​() के अंदर मान को बंद करना चाहता हूं।PHP: टैग को array_values ​​()

मैं नीचे इस लाइन के साथ करने की कोशिश की लेकिन मुझे एक त्रुटि है,

$output = implode("\t",strip_tags(array_keys($item))); 

आदर्श मैं पंक्ति विराम, डबल रिक्त स्थान, मूल्य से टैब बंद पट्टी करना चाहते हैं,

$output = implode("\t",preg_replace(array("/\t/", "/\s{2,}/", "/\n/"), array("", " ", " "), strip_tags(array_keys($item)))); 

लेकिन मैं सोचो मेरी विधि सही नहीं है!

इस पूरे समारोह है,

function process_data($items){ 

    # set the variable 
    $output = null; 

    # check if the data is an items and is not empty 
    if (is_array($items) && !empty($items)) 
    { 
     # start the row at 0 
     $row = 0; 

     # loop the items 
     foreach($items as $item) 
     { 
      if (is_array($item) && !empty($item)) 
      { 
       if ($row == 0) 
       { 
        # write the column headers 
        $output = implode("\t",array_keys($item)); 
        $output .= "\n"; 
       } 

       # create a line of values for this row... 
       $output .= implode("\t",array_values($item)); 
       $output .= "\n"; 

       # increment the row so we don't create headers all over again 
       $row++; 
      } 
     }  
    } 

    # return the result 
    return $output; 
} 

कृपया मुझे पता है अगर आप किसी भी विचार है कि यह कैसे तय करने के लिए करते हैं। धन्यवाद!

उत्तर

3

strip_tags केवल स्ट्रिंग पर काम करता है, सरणी इनपुट पर नहीं। इस प्रकार आपको implode इनपुट के एक स्ट्रिंग के बाद इसे लागू करना होगा।

$output = strip_tags(
    implode("\t", 
     preg_replace(
      array("/\t/", "/\s{2,}/", "/\n/"), 
      array("", " ", " "), 
      array_keys($item) 
     ) 
    ) 
); 

आपको परीक्षण करना होगा यदि यह आपको वांछित परिणाम देता है। मुझे नहीं पता कि preg_replace क्या पूरा करता है।

नहीं तो आप array_map("strip_tags", array_keys($item)) इस्तेमाल कर सकते हैं पहले टैग निकालने के लिए (यदि वहाँ वास्तव में कर रहे हैं तार में टैग के भीतर किसी भी महत्वपूर्ण \t।)

(कोई विचार क्या अपने बड़े समारोह के बारे में है।)

+0

इस के लिए बहुत बहुत धन्यवाद! इस फ़ंक्शन का उपयोग एक्सेल फ़ाइलों को निर्यात करने के लिए किया जाता है। लेकिन जब कीमत में टैग, लाइन ब्रेक इत्यादि होते हैं तो यह 'बग' का कारण बनता है। – laukok

2

टैग को स्ट्रिप करना आसान है:

$a = array('key'=>'array item<br>'); 

function fix(&$item, $key) 
{ 
    $item = strip_tags($item); 
} 

array_walk($a, 'fix'); 

print_r($a); 

बेशक, आप फ़िक्स फ़ंक्शन में $ आइटम में जो भी संशोधन करना चाहते हैं, उसे कर सकते हैं। परिवर्तन सरणी में संग्रहीत किया जाएगा।

एक बहुआयामी सरणी use array_walk_recursive($a, 'fix'); के लिए।

+0

फ़ंक्शन फ़िक्स() में $ कुंजी का उद्देश्य क्या है? यह उस चर और सभी का उपयोग प्रतीत नहीं होता है। धन्यवाद। – pal4life

+0

'array_walk' कॉलबैक को आइटम और कुंजी पास करने पर कॉल करेगा। जब आप '$ key' घोषित नहीं करते हैं तो PHP संभवतः इसे अनदेखा कर देगा, ताकि आप इसे छोड़ सकें। यह चार साल हो गया है और मुझे कारण याद नहीं है, लेकिन अगर मुझे अनुमान लगाना है, तो * ए) * मैं यह दिखाना चाहता था कि आपको दूसरी तर्क में कुंजी मिल जाए, यदि आपको इसकी आवश्यकता हो, * बी) * मुझे लगा इस तरह से अधिक सख्त और पूर्ण है, जिसे मैं बेहतर पसंद करता हूं, या * सी) * मैंने इसे कुछ स्निपेट पर आधारित किया जिसमें कुंजी शामिल थी और मैंने यह भी ध्यान नहीं दिया। :) – GolezTrol

+0

हां, 4 साल काफी समय है, इसलिए प्रतिक्रिया के लिए धन्यवाद, मैंने कभी भी array_walk का उपयोग करने की कोशिश नहीं की थी, इसलिए इसके बारे में जानना अच्छा लगा। – pal4life

3

स्ट्रिप_टैग और ट्रिम करने के लिए सरणी मैप करने का प्रयास करें।

implode("\t", array_map("trim", array_map("strip_tags", array_keys($item)))); 
1

ऐसा लगता है कि आपको array_map का उपयोग करने की आवश्यकता है, क्योंकि स्ट्रिप_टैग स्ट्रिंग की अपेक्षा करता है, एक सरणी नहीं।

$arr = array( "Some\tTabbed\tValue" => '1', 
       "Some value with double spaces" => '2', 
       "Some\nvalue\nwith\nnewlines" => '3', 
      ); 

$search = array("#\t#", "#\s{2,}#", "#\n#"); 
$replace = array("", " ", " "); 
$output = implode("\t", preg_replace($search, $replace, array_map('strip_tags', array_keys($arr)))); 
echo $output; 
+0

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

संबंधित मुद्दे