controleer lege array en verwijder lege array

ik heb 100 waarden in een array, moet controleren dat de eerste tien waarden niet leeg zijn en alle elementen moeten hetzelfde zijn als ze de waarden niet uitschakelen, ik gebruik "|" voor het combineren van alle waarden,

Ik heb alle waarden imploderen met "|" hieronder is de functie die ik gebruik om geen eindresultaten te krijgen zoals vereist, de definitieve waarden worden hieronder gegeven, kunt u alstublieft helpen bij het oplossen van dit probleem

finalvalues =array(
    "3" =>"Education|Category|Roles|Industry|Address|Email|Phone|Mobile",
    "4" => "Bsc|computer|SE|Computers||[email protected]|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||[email protected]|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;
    }
   }
  }
1
dit kan zeker in één regel code worden gedaan, ik begrijp het probleem gewoon niet. je zegt dat je geen items met lege waarden wilt, maar je $ finalwaarden hebben een lege waarde ||
toegevoegd de auteur Galen, de bron
Het moet ook goed worden ingesprongen. Hoe dan ook, ik deed dat voor jou ..
toegevoegd de auteur SuperSaiyan, de bron
Een code moet leesbaar zijn, in de eerste plaats als het moet worden opgelost. Klik op "bewerken" en voer een streepje/formatteer uw code.
toegevoegd de auteur SuperSaiyan, de bron
Uw foreach-verklaring gebruikt de variabele $ vals, moet dat $ waarden zijn? Het zegt $ finalvalue = array_remove_empty (), bedoel je functie array_empty ()?
toegevoegd de auteur codewaggle, de bron
@ Galenarraywaarde kan leeg zijn maar niet geheel array met lege waarden
toegevoegd de auteur user1477117, de bron
@codewaggle: sorry ik heb de code aangepast
toegevoegd de auteur user1477117, de bron
@ Thrustmaster bedankt
toegevoegd de auteur user1477117, de bron
@ Thrustmaster: ik heb code geformatteerd
toegevoegd de auteur user1477117, de bron

2 antwoord

Dit zou je moeten helpen (met inline reacties):

$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;
        }
    }
}
3
toegevoegd
@ user1477117 Het is niet duidelijk wat u probeert te bereiken of wilt bereiken. Het bijwerken van de code helpt niet. Alsjeblieft 1) Update met voorbeeldinvoer en voorbeelduitvoer en wat meer uitleg (update de code niet opnieuw) 2) Stel precies vast waar het probleem zit, 3) Zeg wat je probeert te doen.
toegevoegd de auteur SuperSaiyan, de bron
En als het gerelateerd is, plaats dan een voorbeeld met voorbeeldinvoer en voorbeelduitvoer, zodat we het beter kunnen begrijpen ..
toegevoegd de auteur SuperSaiyan, de bron
Werk alsjeblieft je oorspronkelijke vraag bij, als deze gerelateerd is, of nog beter plaats een nieuwe vraag :)
toegevoegd de auteur SuperSaiyan, de bron
klinkt alsof u een voor of while-instructie wilt gebruiken. Kijk hier om te zien welke het beste bij u past: php.net/ manual/nl/language.control-structures.php
toegevoegd de auteur codewaggle, de bron
ik heb de waarde van $ waarden bewerkt
toegevoegd de auteur user1477117, de bron
@ Thrustmaster: ik probeer te controleren of de huidige array
toegevoegd de auteur user1477117, de bron
@ Thrustmaster Ik heb de code bijgewerkt. Kunt u helpen, ik probeer de controle op lege array en probeer te controleren of alle array-aantallen hetzelfde moeten zijn
toegevoegd de auteur user1477117, de bron
@thrustmaster im probeer alle array-telling te controleren als eerste telling minder is dan tweede telling die ik probeer te verwijderen, het werkt niet kun je alsjeblieft helpen uitschakelen ($ prevKey); $ count = array (); foreach (array_keys ($ array) als $ -code) {$ count [$ key] = count ($ array [$ key]); if (isset ($ prevKey) && $ count [$ prevKey]! == $ count [$ key]) {unset ($ array [$ prevKey]); } $ prevKey = $ -sleutel; }
toegevoegd de auteur user1477117, de bron
hoe de maximale telling van array te krijgen bijvoorbeeld: in foreach kan ik vergelijken met $ ary_count ($ maxcount = 8) if ($ ary_count <$ maxcount)
toegevoegd de auteur user1477117, de bron
als ($ ary_count == 1) 1 retourneert; $ ary_count is onbekend, het kan 2 of 5 zijn of .. een bepaalde tijdwaarde kan 2 zijn in de eerste array en zelfs de tweede array kan dezelfde waarden van de eerste waarde zijn
toegevoegd de auteur user1477117, de bron

Hier zijn enkele veel eenvoudiger, geen gekke manieren

PHP 5.3 +

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

PHP < 5.3

Hiermee wordt de array $ values ​​rechtstreeks bewerkt

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