ホームページ  >  記事  >  バックエンド開発  >  多次元配列の値が空かどうかを判断するにはどうすればよいですか?

多次元配列の値が空かどうかを判断するにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-23 13:54:171451ブラウズ

たとえば、これら 2 つの配列 $arr は空とみなされ、$brr は貴重とみなされます。

$arr=array(0=>'', 1=>array(0=>'' ,1=>array(0=>'') ));$brr=array(0=>'', 1=>array(0=>'' ,1=>array(0=>'1') ));


ディスカッションに返信 (解決策)

これは次のようになります

$arr = array(0=>'', 1=>array(0=>'' ,1=>array(0=>'') ));var_dump(preg_replace('/[",\[\]]/', '', json_encode($arr)));
string(0) ""
$brr の場合は明らかに string(1) "1" になります

次のようにすることができますthis rreestring(0) ""
明らかに $brr は string(1) "1" になります


配列が大きい場合、これは効率に影響しますか?それとも、値が存在するかどうかを再帰的に判断できますか?

おそらくこれの方が良いです

$arr = array(0=>'', 1=>array(0=>'' ,1=>array(0=>'') ));var_dump(preg_replace('/[",\[\]]/', '', json_encode($arr)));

おかしいですね、私は2つの関数しか実行しませんでした
再帰よりもはるかに速いはずです

$arr = array(0=>'', 1=>array('a'=>'' ,1=>array(0=>'') ));var_dump(preg_replace('/"\w+":|[",{}\[\]]/', '', json_encode($arr)));

再帰はこのように書くべきです

$arr = array(0=>'', 1=>array('a'=>'' ,1=>array(0=>'') ));var_dump(foo($arr));function foo($ar) {  if(empty($ar)) return true;  if(is_array($ar)) {    foreach($ar as $v) {      if(! foo($v)) return  false;    }    return true;  }  return flase;}

再帰はこのように書くべきです

$arr = array(0=>'', 1=>array('a'=>'' ,1=>array(0=>'') ));var_dump(foo($arr));function foo($ar) {  if(empty($ar)) return true;  if(is_array($ar)) {    foreach($ar as $v) {      if(! foo($v)) return  false;    }  }  return flase;}


モデレーターありがとうございます! !

$arr=array(0=>'',1=>array(0=>'',1=>array(0=>'')));$brr=array(0=>'',1=>array(0=>'',1=>array(0=>'1')));echo test($arr).'<br>';echo test($brr);function test(&$array){	static $r = 0;	if(!is_array($array)){		if(empty($array)){			$r=0;		}else{			$r=1;		}	}	foreach ($array as $key => $value) {		if (is_array($value)) {			test($array[$key]);		} else {			if(empty($value)){				$r=0;			}else{				$r=1;			}		}	}	return $r;}

結果:
0
1

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。