PHP में किसी सरणी के बहुआयामी (multidimensional) होने की जांच करने के लिए विभिन्न तरीके हैं। दिए गए उदाहरण में rsort() का उपयोग किया गया है, लेकिन यह तरीका भरोसेमंद नहीं है। बेहतर और मानक तरीके नीचे बताए गए हैं।
दिया गया उदाहरण (अनुशंसित नहीं)
<?php
$my_array = array(
array("This", "is", "a", "sample"),
array("Hi", "there")
);
function multi_dim($my_arr) {
rsort($my_arr);
return isset($my_arr[0]) && is_array($my_arr[0]);
}
echo "Is the array multi-dimensional? ";
var_dump(multi_dim($my_array));
?>
आउटपुट
Is the array multi-dimensional? bool(true)
इस तरीके की समस्याएँ:
rsort()सरणी को संशोधित करता है (मूल क्रम नष्ट करता है)।- यह केवल पहले तत्व की जांच करता है; यदि पहला तत्व सरणी नहीं है लेकिन बाद के हैं, तो गलत
falseलौटाएगा। - संख्यात्मक कुंजियों वाली सरणियों पर अप्रत्याशित व्यवहार कर सकता है।
अनुशंसित तरीके
1. array_filter() के साथ (सबसे विश्वसनीय)
<?php
function isMultiDimensional($arr) {
return count(array_filter($arr, 'is_array')) > 0;
}
$arr1 = [1, 2, 3];
$arr2 = [1, [2, 3], 4];
$arr3 = ['a' => [1,2], 'b' => [3,4]];
var_dump(isMultiDimensional($arr1)); // false
var_dump(isMultiDimensional($arr2)); // true
var_dump(isMultiDimensional($arr3)); // true
?>
2. पुनरावर्ती जांच (गहरी नेस्टिंग के लिए)
<?php
function isMultiDimensionalDeep($arr) {
foreach ($arr as $value) {
if (is_array($value)) {
return true; // या गहरी जांच के लिए: return isMultiDimensionalDeep($value);
}
}
return false;
}
?>
3. array_walk_recursive का उपयोग
<?php
function isMultiDimensional($arr) {
$isMulti = false;
array_walk_recursive($arr, function($val, $key) use (&$isMulti) {
// यह केवल पत्ती नोड्स देखता है, संरचना नहीं
});
// बेहतर: count($arr) !== count($arr, COUNT_RECURSIVE)
return count($arr) !== count($arr, COUNT_RECURSIVE);
}
?>
सबसे सरल एक-लाइनर
<?php $isMulti = count($arr) !== count($arr, COUNT_RECURSIVE); ?>
COUNT_RECURSIVE सभी नेस्टेड तत्वों को गिनता है। यदि संख्या अलग है, तो सरणी बहुआयामी है।
निष्कर्ष
rsort() आधारित तरीका सरणी को संशोधित करता है और अविश्वसनीय है। count($arr) !== count($arr, COUNT_RECURSIVE) या array_filter($arr, 'is_array') का उपयोग करें।