我在数组中有100个值,需要检查前十个值是否为空,如果没有取消设置值,所有元素应该相同,我使用“|”用于梳理所有值,
我所有的值都以“|”为内爆下面是我使用的功能,我没有按要求获得最终结果,下面给出最终值,请你帮忙解决这个问题
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;
}
}
}
答案 0 :(得分:3)
这可以帮助你(使用内联注释):
$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)
这里有一些更简单,更疯狂的方式
PHP 5.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] );
}
}