检查空数组并删除空数组

时间:2023-02-08 11:13:26

i have 100 values in array ,need to check first ten values are not empty and all elements should be same count if not unset the values ,i using "|" for combing all the values ,

我在数组中有100个值,需要检查前十个值是否为空,如果没有取消设置值,所有元素应该相同,我使用“|”为了梳理所有价值观,

I have all the values implode with "|" below is the function which im using im not getting final results as required ,finalvalues is given below ,can you please help fixing this issue

我有所有的价值观与“|”内爆下面是我使用的函数,我没有按要求获得最终结果,下面给出最终值,请你帮忙解决这个问题

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;
    }
   }
  }

2 个解决方案

#1


1  

Here are some much simpler, not crazy ways

这里有一些更简单,更疯狂的方法

PHP 5.3+

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

PHP < 5.3

PHP <5.3

This edits the $values array directly

这直接编辑$ values数组

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

#2


3  

This should help you (with inline comments):

这应该可以帮助你(使用内联注释):

$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){
    $null_count = 0;
    $ary_count = count($ary);
    if ($ary_count == 1) //this means there was no '|', hence no split.
        return 1;

    foreach($ary as $value){
    //      echo $value;
        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;
        }
    }
}

#1


1  

Here are some much simpler, not crazy ways

这里有一些更简单,更疯狂的方法

PHP 5.3+

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

PHP < 5.3

PHP <5.3

This edits the $values array directly

这直接编辑$ values数组

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

#2


3  

This should help you (with inline comments):

这应该可以帮助你(使用内联注释):

$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){
    $null_count = 0;
    $ary_count = count($ary);
    if ($ary_count == 1) //this means there was no '|', hence no split.
        return 1;

    foreach($ary as $value){
    //      echo $value;
        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;
        }
    }
}