2010-04-17 17 views
9

मेरे पास $times नामक एक सरणी है। यह छोटी संख्याओं की एक सूची है (15,14,11,9,3,2)। ये उपयोगकर्ता प्रस्तुत किए जाएंगे और उन्हें मिनटों में माना जाएगा। जैसे ही PHP समय सेकंड पर काम करता है, मैं 60 सेमैं PHP के साथ आसानी से प्रत्येक आइटम को सरणी में कैसे गुणा कर सकता हूं?

मैं array_walk और array_map के साथ खेल रहा हूं लेकिन मैं उन काम नहीं कर सकता।

+0

मैं array_map/bcmul समाधान गॉर्डन बशर्ते आप अभी तक foreach या कस्टम कार्यों का उपयोग नहीं करना चाहते हैं, तो के लिए जाना होगा, आप * * 60 से सरणी गुणा नहीं है और इसके बजाय 60 से पीएचपी समय विभाजित पर विचार किया है ? –

+0

मैं सभी उदाहरणों को आजमाने की कोशिश कर रहा हूं, बस मुझे पता है कि भविष्य में इसे कैसे किया जाए। Foreach पाश सबसे सरल लगता है। क्या * के बीच अंतर * है = और? – Henryz

+0

Henryz: $ एक * = 6 $ एक = $ एक * 6 – lamas

उत्तर

7

बस पुनरावृतिforeach बयान और गुणा के साथ सरणी पर:

foreach ($times as $value) { 

    $new_times[] = $value * 60; 

} 
+1

यह बहुत अच्छी तरह से मुझे क्या करना है, धन्यवाद कोशिश कर रहा था के लिए काम किया की संक्षिप्त रूप है। – Henryz

22

आप उपयोग कर सकते हैं array_map:

array_map() लागू करने के बाद arr1 सभी तत्वों वाली एक सरणी देता है प्रत्येक को कॉलबैक फ़ंक्शन।

array_map(function($el) { return $el * 60; }, $input); 

पीएचपी < 5,3

array_map(create_function('$el', 'return $el * 60;'), $input); 
के लिए एक ही: पैरामीटर की संख्या कॉलबैक फ़ंक्शन स्वीकार करता है कि array_map() कॉलबैक के लिए लैम्ब्डा कार्यों के साथ

उदाहरण के लिए पारित सरणियों की संख्या से मेल खाना चाहिए

या साथ bcmul कॉलबैक के लिए

array_map('bcmul', $input, array_fill(0, count($input), 60)); 

लेकिन इसके लिए foreach का उपयोग करने में कुछ भी गलत नहीं है।

5

आप अपने मामले में सादगी के लिए foreach का उपयोग करना चाहते हो सकता है:

foreach($times as &$val){ $val *= 60; } 

मुझे लगता है कि अपने सरणी के मूल्यों जिन्हें आप गुणा करना चाहते हैं, चाबियाँ नहीं हैं। चूंकि उपर्युक्त समाधान संदर्भों का उपयोग करता है, यह आपके मूल सरणी को भी बदल देगा - लेकिन जैसा कि आप पहले array_map पर लक्षित कर रहे थे, मुझे लगता है कि आप इसे चाहते हैं।

ऊपर समाधान शायद समझते हैं और सबसे अधिक संभावना array_map जो (जाहिर है) प्रत्येक तत्व के लिए एक समारोह कॉल करने के लिए है का उपयोग कर से अधिक तेजी से करने के लिए आसान है। मैं केवल अधिक जटिल चीजों जैसे उन्नत सॉर्टिंग एल्गोरिदम के लिए array_map का उपयोग करता हूं, लेकिन निश्चित रूप से कुछ के रूप में कुछ के लिए नहीं।

3

मैं व्यक्तिगत रूप से दूसरे गॉर्डन से सुझाव सिर्फ एक लैम्ब्डा (या बनाया) समारोह और किसी भी कार्य का उपयोग करने चाहते हैं:

array_map(function($el) { return $el * 60; }, $input_array); 

(पीएचपी> = 5.3) या

array_map(create_function('$el', 'return $el * 60;'), $input_array); 

(पीएचपी < 5,3)

निश्चित रूप से मैं सरणी डुप्लिकेट करने के लिए कोई कारण भी देख (बोझिल हो सकता है अगर मूल्यों का बहुत कुछ शामिल कर रहे हैं); यह भी ध्यान दें कि foreach (जो मैं दूसरा आसान हो सकता है) का उपयोग खतरनाक भी हो सकता है यदि आप इसके साथ सावधानी से काम नहीं कर रहे हैं ... और फिर रखरखाव किसी भी तरह से चुनौतीपूर्ण हो सकता है (क्योंकि आपको हर बार इससे निपटना याद रखना होगा आप उस कोड पर काम करते हैं)।यदि आपके पास इस चरण में ऑप्टिमाइज़ करने के कोई कारण नहीं हैं (आईई आपके एप्लिकेशन में गति की समस्या नहीं है), अब इसे न करें और array_map का उपयोग करने की चिंता न करें। यदि आप वास्तव में जरूरत है तो आप अब रखरखाव की आसानी के बारे में सोच सकते हैं और बाद में अनुकूलित कर सकते हैं।

वास्तव में, यदि आप संदर्भ से जाना और फिर आप फिर से foreach का उपयोग करें, आप अप्रत्याशित परिणाम में कदम हो सकता है (नीचे उदाहरण देखें ...)

$a=array('1','2','3'); 

foreach ($a as &$v) { 
     $v *= 60; 
} 
print_r($a); 
foreach ($a as $v); 
print_r($a); 

आउटपुट है:

सरणी ( [0] => 60 [1] => 120 [2] => 180 )

सरणी ( [0] => 60 [1] => 120 [2] => 120 )

शायद नहीं है कि तुम क्या दूसरा चक्र पर की उम्मीद है। यही कारण है कि मैं आम तौर पर जब मैं यह कर सकते हैं कॉम्बो ByRef foreach & से बचें।

+0

हाय, जवाब के लिए धन्यवाद, यह केवल अगर यह इस वी की तरह एक नई सरणी = [] बनाया काम करने के लिए लग रहा था। निश्चित नहीं है क्यों: एस – Henryz

2
array_walk($myArray, function(&$v) {$v *= 60;}); 
+0

जबकि यह कोड स्निपेट प्रश्न हल कर सकता है, [एक स्पष्टीकरण सहित] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) वास्तव में सुधारने में मदद करता है आपकी पोस्ट की गुणवत्ता याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। - [समीक्षा से] (https://stackoverflow.com/review/low-quality-posts/11668559) – Ferrybig

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