Php 检查空数组并删除空数组

Php 检查空数组并删除空数组,php,arrays,Php,Arrays,数组中有100个值,需要检查前10个值是否为空,所有元素的计数应相同如果未取消设置值,我使用“|”组合所有值 我有所有带“|”的内爆值,下面是我使用的函数,我没有按要求得到最终结果,下面给出了最终值,你能帮我解决这个问题吗 finalvalues =array( "3" =>"Education|Category|Roles|Industry|Address|Email|Phone|Mobile", "4" => "Bsc|computer|SE|Computers|

数组中有100个值,需要检查前10个值是否为空,所有元素的计数应相同如果未取消设置值,我使用“|”组合所有值

我有所有带“|”的内爆值,下面是我使用的函数,我没有按要求得到最终结果,下面给出了最终值,你能帮我解决这个问题吗

finalvalues =array(
    "3" =>"Education|Category|Roles|Industry|Address|Email|Phone|Mobile",
    "4" => "Bsc|computer|SE|Computers||test@test.com|123123132|123234234234"
);

$values = array(
        "0"=> "Computer Student History",
        "1"=> "Computer Student History",
        "2"=> "Computer Student History|batch number",
        "3" =>  "| | | | | | | | | | | | | | | | ",
        "4" => "Education|Category|Roles|Industry|Address|Email|Phone|Mobile",
        "5" => "Bsc|computer|SE|Computers||test@test.com|123123132|123234234234"
);



$newVal = array();
    foreach ($values as $key => $val) { //$values it is..
     $prevalues = explode('|', $val);
     $finalvalue  = array_empty($prevalues ,$full_null=true);
      if($finalvalue == 1){
         unset($prevalues); //why??
     }else{
    $vales = implode('|', $prevalues);
    $newVal[$key] = $vales; //use $key, to preserve the keys here..
     }
     }
   print_r($newVal); //output

  function array_empty($ary, $full_null=false){

   unset($prevKey);
   $count = array();
   $null_count = 0;
   $ary_count = count($ary);
   if ($ary_count == 1) //this means there was no '|', hence no split.
    return 1;

   foreach($array_keys($ary) as $value){
    //      echo $value;
//trying check if first value is less then second value unset array similar second is less then third value unset second .. so the all the array values is same count

$count[$value] = count($ary[$value]);
    if (isset($prevKey) && $count[$prevKey] !== $count[$value]) {
    //unset($array[$prevKey]);
    return 1;
    }

    if($value == NULL || trim($value) == "" ){ // trim(..) was what you wanted.
        $null_count++;
    }
   }

if($full_null == true){
    if($null_count == $ary_count){
        return  1;
    }else{
        return 0;
    }
   }
  }
这将有助于您(使用内联注释):

这将有助于您(使用内联注释):


这里有一些简单得多的方法,而不是疯狂的方法

PHP5.3+

$final = array_filter(
    $values,
    function( $v ){
        return
            preg_replace( '~\s*\|\s*~', '', $v ) &&
            count( explode( '|', $v ) ) === 8;
    }
);
PHP<5.3

这将直接编辑$values数组

foreach( $values as $k => $value ) {
    if ( preg_replace( '~\s*\|\s*~', '', $value ) == '' || count( explode( '|', $value ) ) !== 8 ) {
        unset( $values[$k] );
    }
}

这里有一些简单得多的方法,而不是疯狂的方法

PHP5.3+

$final = array_filter(
    $values,
    function( $v ){
        return
            preg_replace( '~\s*\|\s*~', '', $v ) &&
            count( explode( '|', $v ) ) === 8;
    }
);
PHP<5.3

这将直接编辑$values数组

foreach( $values as $k => $value ) {
    if ( preg_replace( '~\s*\|\s*~', '', $value ) == '' || count( explode( '|', $value ) ) !== 8 ) {
        unset( $values[$k] );
    }
}


如果代码必须被修复,那么它首先应该是可读的。请单击“编辑”并缩进/格式化您的代码。@strustmaster:我已经格式化了代码,还需要正确缩进。无论如何,我是为你做的..你的foreach语句使用的是$vals变量,应该是$values吗?上面写着$finalvalue=array\u remove\u empty(),你是说函数array\u empty()?@codewaggle:对不起,我编辑了代码。如果必须修复代码,那么代码首先应该是可读的。请单击“编辑”并缩进/格式化您的代码。@strustmaster:我已经格式化了代码,还需要正确缩进。无论如何,我是为你做的..你的foreach语句使用的是$vals变量,应该是$values吗?它说$finalvalue=array\u remove\u empty(),你是说函数array\u empty()?@codewaggle:对不起,我编辑了代码如果($ary\u count==1)返回1$ary_计数未知,可能是2或5或。。一些时间值在第一个数组中可以是2,甚至第二个数组也可以是第一个值的相同值如何获取数组的最大计数例如:在foreach中,如果($ary_计数<$maxcount)听起来像是要使用for或while语句,我可以与$ary_计数($maxcount=8)进行比较。查看此处,看看哪一个最适合您的需要:@strustmaster我正在检查所有数组计数如果第一个计数小于我要删除的第二个计数,它不起作用,请您帮助取消设置($prevKey)$计数=数组();foreach(array_keys($array)as$key){$count[$key]=count($array[$key]);if(isset($prevKey)&$count[$prevKey]!==count[$key]){unset($array[$prevKey]);}$prevKey=$key;}如果相关,请用它更新原始问题,或者更好:)如果($ary_count 1)返回1$ary_计数未知,可能是2或5或。。一些时间值在第一个数组中可以是2,甚至第二个数组也可以是第一个值的相同值如何获取数组的最大计数例如:在foreach中,如果($ary_计数<$maxcount)听起来像是要使用for或while语句,我可以与$ary_计数($maxcount=8)进行比较。查看此处,看看哪一个最适合您的需要:@strustmaster我正在检查所有数组计数如果第一个计数小于我要删除的第二个计数,它不起作用,请您帮助取消设置($prevKey)$计数=数组();foreach(array_keys($array)as$key){$count[$key]=count($array[$key]);if(isset($prevKey)&&$count[$prevKey]!=$count[$key]){unset($array[$prevKey]);}$prevKey=$key;}如果相关,请更新您的原始问题,或者更好:)