हैरानी की array_keys_existबात नहीं है ?! अंतरिम में जो इस आम कार्य के लिए एकल लाइन अभिव्यक्ति का पता लगाने के लिए कुछ स्थान छोड़ता है। मैं एक शेल स्क्रिप्ट या दूसरे छोटे प्रोग्राम के बारे में सोच रहा हूं।
नोट: निम्नलिखित समाधानों में से प्रत्येक […]php 5.4+ में उपलब्ध संक्षिप्त सरणी घोषणा सिंटैक्स का उपयोग करता है
if (0 === count(array_diff(['story', 'message', '…'], array_keys($source)))) {
} else {
}
(हैम टिप किम स्टैक्स )
यह दृष्टिकोण मुझे मिला सबसे संक्षिप्त है। array_diff()तर्क 2 में मौजूद वस्तुओं की एक सरणी देता है 2 तर्क 2 में मौजूद नहीं है। इसलिए एक खाली सरणी इंगित करती है कि सभी कुंजियाँ मिली थीं। Php 5.5 में आप सरलता 0 === count(…)से कार्य कर सकते हैं empty(…)।
if (0 === count(array_reduce(array_keys($source),
function($in, $key){ unset($in[array_search($key, $in)]); return $in; },
['story', 'message', '…'])))
{
} else {
}
पढ़ने में कठिन, बदलने में आसान। array_reduce()किसी मान पर पहुंचने के लिए किसी सरणी पर पुनरावृति करने के लिए कॉलबैक का उपयोग करता है। उन कुंजियों को खिलाकर, जिनके $initialमूल्य में हम रुचि रखते हैं $inऔर फिर स्रोत में मिली कुंजियों को हटाकर हम 0 तत्वों के साथ समाप्त होने की उम्मीद कर सकते हैं यदि सभी कुंजियाँ मिली थीं।
निर्माण को संशोधित करना आसान है क्योंकि हम नीचे की रेखा पर अच्छी तरह से फिट होने में रुचि रखते हैं।
if (2 === count(array_filter(array_keys($source), function($key) {
return in_array($key, ['story', 'message']); }
)))
{
} else {
}
array_reduceसमाधान की तुलना में लिखने के लिए सरल लेकिन संपादित करने के लिए थोड़ा मुश्किल। array_filterएक पुनरावृत्त कॉलबैक भी है जो आपको कॉलबैक में सही (कॉपी आइटम नए सरणी में) या असत्य (कॉपी न करें) वापस करके फ़िल्टर किए गए सरणी बनाने की अनुमति देता है। गोटिका यह है कि आपको 2अपनी अपेक्षित वस्तुओं की संख्या में परिवर्तन करना चाहिए ।
इसे और अधिक टिकाऊ बनाया जा सकता है, लेकिन पहले से पढ़ी जा सकने वाली योग्यता पर:
$find = ['story', 'message'];
if (count($find) === count(array_filter(array_keys($source), function($key) use ($find) { return in_array($key, $find); })))
{
} else {
}