array_filter - एक कॉलबैक फ़ंक्शन का उपयोग करPHP array_filter, कॉलबैक में कुंजी कैसे प्राप्त करें?
सरणी array_filter (सरणी $ इनपुट [, कॉलबैक $ कॉलबैक])
वर्तमान सरणी मूल्य की कुंजी प्राप्त कॉलबैक कर सकते हैं और कैसे एक सरणी के तत्वों फ़िल्टर ?
array_filter - एक कॉलबैक फ़ंक्शन का उपयोग करPHP array_filter, कॉलबैक में कुंजी कैसे प्राप्त करें?
सरणी array_filter (सरणी $ इनपुट [, कॉलबैक $ कॉलबैक])
वर्तमान सरणी मूल्य की कुंजी प्राप्त कॉलबैक कर सकते हैं और कैसे एक सरणी के तत्वों फ़िल्टर ?
आप के रूप में यहाँ पर चर्चा की array_walk समारोह इस्तेमाल कर सकते हैं (3 जवाब नीचे): is it possible if callback in array_filter receive parameter?
एक पिछली टिप्पणी आप उल्लिखित आप वास्तव में कुछ इस तरह की तलाश कर रहे हैं:
foreach ($t as $k => $v)
if (!array_key_exists($k, $valid))
unset($t[$k])
तो वास्तव में
को सरणी $t
से सभी मानों को हटाएं जिनके पास सरणी $valid
में कोई कुंजी नहीं है।
इसके लिए PHP फ़ंक्शन को array_intersect_key
कहा जाता है। चौराहे फ़िल्टर किए गए परिणाम के बराबर है:
$filtered = array_intersect_key($t, $valid);
वहाँ array_filter
पहुँच तत्व के प्रमुख के कॉलबैक जाने के लिए कोई रास्ता नहीं है, और न ही वहाँ एक समान कार्य करता है कि आप क्या चाहते है।
हालांकि, आप अपने खुद के समारोह इस के लिए नीचे दिए गए एक की तरह लिख सकते हैं:
function arrayfilter(array $array, callable $callback = null) {
if ($callback == null) {
$callback = function($key, $val) {
return (bool) $val;
};
}
$return = array();
foreach ($array as $key => $val) {
if ($callback($key, $val)) {
$return[$key] = $val;
}
}
return $return;
}
$test_array = array('foo', 'a' => 'the a', 'b' => 'the b', 11 => 1101, '', null, false, 0);
$array = arrayfilter($test_array, function($key, $val) {
return is_string($key);
});
print_r($array);
/*
Array
(
[a] => the a
[b] => the b
)
*/
$array = arrayfilter($test_array);
print_r($array);
/*
Array
(
[0] => foo
[a] => the a
[b] => the b
[11] => 1101
)
*/
मेरे पास अन्य विकल्प यहाँ सुझाव पसंद नहीं था, अगर किसी और को इस सुविधा के लिए लग रही है, यहाँ एक है त्वरित कार्यान्वयन:
function array_filter_keys($a, $c){
$i=array_filter(array_keys($a), $c);
return array_intersect_key($a, array_flip($i));
}
इस समारोह का परिणाम वास्तव में क्या यह जैसा लगता है, यह एक सरणी एक कॉलबैक समारोह है कि कुंजी मानों के बजाय प्राप्त करता द्वारा फ़िल्टर वापस आ जाएगी।
संपादित करें: यह कुछ अन्य टिप्पणियों को पढ़ने के बाद अस्वीकरण का अधिक है, मुझे एहसास है कि ओपी वास्तव में केवल array_intersect
की तलाश में है, जैसा हैकर ने बताया। मैं इस सवाल का जवाब यहाँ छोड़ देंगे, हालांकि बाद ऑप्स सवाल स्पष्ट रूप से है कि जरूरत नहीं बताता है और इस पृष्ठ array_filter_keys
के लिए गूगल में दिखाई देता है: पीएचपी 5.6.0 जोड़ा वैकल्पिक ध्वज पैरामीटर और स्थिरांक ARRAY_FILTER_USE_KEY और
ARRAY_FILTER_USE_BOTH
बहुत मुश्किल है, और मैं अनुक्रमित लोगों के साथ अनुक्रमित सरणी के साथ काम कर रहा हूं। उस समाधान कुंजी में हार्डकोडेड हैं। – gremo
शायद एक और मानक 'कोड'foreach ($ arr = $ $ के रूप में $ arr = {$ val) {} कार्यान्वयन आपकी आवश्यकताओं को पूरा करेगा। – jondbaker
मुझे इनपुट सरणी फ़िल्टर करने की आवश्यकता है: यदि कुंजी किसी अन्य सरणी में मौजूद है तो तत्व को वापस करें। मुझे उम्मीदवार 'array_filter' मिला लेकिन मुझे कॉलबैक में वर्तमान सरणी मान की कुंजी नहीं मिल सकती है। – gremo