求一個遞迴函式

來源:互聯網
上載者:User
小弟想求一個遞迴函式,能判斷多維陣列是否為。像array(array(),array(array(),array()))這樣的判定為空白,但只要有一個數組裡含有非空值元素,就判定不為空白,例如:array(array(),array(array('a'),array()));

????????????????????????????????
我自己用CI寫的一個函數,但是沒辦法準確判定;
function is_empty($mixed){
if(is_array($mixed) && !empty($mixed)){
foreach($mixed as $v){
$this->is_empty($v);
}
}
if($mixed === '0' || $mixed === 0 || $mixed === 'false' || $mixed === false || $mixed === 'null'){
return -1;
}
elseif(!empty($mixed)){
return -1;
}
else{
return 1;
}
}
??????-????????????????????????????????????
求大神幫忙


回複討論(解決方案)

function is_empty($mixed){
if(is_array($mixed) && !empty($mixed)){
foreach($mixed as $v){
if($this->is_empty($v) == ??) return 1;
}
.....

紅色的一定要!
但是我被你搞混昏了

if($mixed === '0' || $mixed === 0 || $mixed === 'false' || $mixed === false || $mixed === 'null'){
return -1;
}
可知為空白時返回 -1

elseif(!empty($mixed)){
return -1;
}
又是不為空白時返回 -1

if($mixed === '0' || $mixed === 0 || $mixed === 'false' || $mixed === false || $mixed === 'null'){
return -1;
}
這段的意思是不排除變數的值可能是字串‘0’,‘false’,‘null'或者整型0,所以才用了全等於,其他非空項返回-1,空則返回1;

照你說的,迴圈裡加了IF語句,但還是不行
????????????????????????????????????
if(is_array($mixed) && !empty($mixed)){
foreach($mixed as $v){
if($this->is_empty($v) == -1){
return -1;
}
}
}
if($mixed === '0' || $mixed === 0 || $mixed === 'false' || $mixed === 'null'){
return -1;
}
elseif(!empty($mixed)){
return -1;
}
else{
return 1;
}

那就是改
if($this->is_empty($v) == ??) return 1;

if($this->is_empty($v) == 1) return 1;

這樣寫可能好些

$a = array(array(),array(array(1),array()));$b = array(array(),array(array(),array()));echo no_empty($a);echo no_empty($b);//檢查是否不為空白function no_empty($ar) {  if(! is_array($ar)) return 1;  $res = 0;  foreach($ar as $v) {    if(is_array($v)) $res |= no_empty($v);    else $res = 1;  }  return $res;}

成功了~把原來函數的判斷順序改了一下就成功了
-------------------------------------------------------------------------------------
function no_empty($ar) {
//排除字串'0','false','null'和INT 0 、布爾false;
if($ar === '0' || $ar === 0 || $ar === 'false' || $ar === false || $ar === 'null'){
return 1;
}
//如果不是數組且不是上面的值,直接判定是否為空白
elseif(! is_array($ar)){
if(!empty($ar)){
return 1;
}
return -1;
}
//遞迴
else{
//初始化$res
$res = -1;
foreach($ar as $v) {
//只要有多維陣列裡有一個非空元素值,就記錄下來
if($this->no_empty($v) === 1){
$res = 1;
}
}
return $res;
}
}

我可不可以給分我自己

學學怎麼玩。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.