Avatar billede esmic Nybegynder
18. april 2016 - 18:01 Der er 6 kommentarer

Push ens "values" til nyt array

Som man kan se af følgende array jeg har bygget, er de 2 nederste værdier ens. Jeg vil gerne pushe dem ind i et nyt array for sig selv. Er der nogen der kan give mig et spark i den rigtige retning.


array (size=6)
  0 =>
    array (size=1)
      'uens' => string 'AQHRmVBW7uTgObjnzkqrpzr' (length=30)
  1 =>
    array (size=1)
      'uens' => string 'AQHRmU8HooJPnCKUfkGLDzF' (length=30)
  2 =>
    array (size=1)
      'uens' => string 'AQHRmU7+BdwM7pmpzEKewPM' (length=30)
  3 =>
    array (size=1)
      'uens' => string 'AQHRmU74sTU6YP4GsEee8lr' (length=30)
  4 =>
    array (size=1)
      'uens' => string 'AQHRmOqQAoHUgxj7T0et8fn' (length=30)
  5 =>
    array (size=1)
      'uens' => string 'AQHRmOqQAoHUgxj7T0et8fn' (length=30)

mvh esmic
Avatar billede olsensweb.dk Ekspert
18. april 2016 - 19:58 #1
er det noget ala dette du vil


pseudo code

start med at sorterer array
loop start
sammenlign ref med nuværende
hvis ens ligges index i et tmp array
tæl index op
loop stop

find længden på tmp array
lig værdierne fra org array over i nyt array, ud fra tmp værdierne
man bør så unsette index fra org_array

org array vi nu kun indeholde unikke værdier, hvoraf nogle af dem også er i copy array



php code
 
<?php
$org_array=array(
    "uens"=>array(
        'AQHRmVBW7uTgObjnzkqrpzr', 
        'AQHRmU8HooJPnCKUfkGLDzF',
        'AQHRmU7+BdwM7pmpzEKewPM',
        'AQHRmOqQAoHUgxj7T0et8fn',
        'AQHRmU74sTU6YP4GsEee8lr',       
        'AQHRmOqQAoHUgxj7T0et8fn'
    )
);
echo "<pre>";
print_r($org_array);
echo "</pre>";

// http://php.net/manual/en/function.array-multisort.php
array_multisort($org_array["uens"], SORT_STRING);

echo "<pre>";
print_r($org_array);
echo "</pre>";


$tmp=array();
$ref="";
for($i=0, $lng=count($org_array["uens"]); $i<$lng;$i++ ){
    if($ref == $org_array["uens"][$i]){
        $tmp[]=$i;   
    }
    $ref=$org_array["uens"][$i];
}

echo "<pre>";
print_r($tmp);
echo "</pre>";


$copy=array();
for($i=0, $lng=count($tmp);$i<$lng;$i++){
    $tmp_i=$tmp[$i];
    $copy[]=$org_array["uens"][$tmp_i];
    unset( $org_array["uens"][$tmp_i] );
}

echo "<pre>";
print_r($copy);
echo "</pre>";

// http://php.net/manual/en/function.array-values.php
$org_array["uens"] = array_values($org_array["uens"]);

echo "<pre>";
print_r($org_array);
echo "</pre>";
?>


eller skal den fjerne alle kopier af værdien
Avatar billede tryltryl Juniormester
18. april 2016 - 20:10 #2
Er det udelukket at flytte denne logik hen hvor arrayet skabes?
Avatar billede esmic Nybegynder
19. april 2016 - 08:12 #3
Ja det er alle værdier af: AQHRmOqQAoHUgxj7T0et8fn
Avatar billede esmic Nybegynder
19. april 2016 - 08:38 #4
Ja altså jeg vil gerne skille alle ens værdier fra uens.
Avatar billede olsensweb.dk Ekspert
19. april 2016 - 10:35 #5
ved at tælle baglæns kan jeg spare et array :)
afprøv denne
 
<?php
function testudskriv($ar){
    echo "<pre>";
    print_r($ar);
    echo "</pre>";   
}
$org_array=array(
    "uens"=>array(
        'AQHRmVBW7uTgObjnzkqrpzr', 
        'AQHRmU8HooJPnCKUfkGLDzF',
        'AQHRmU7+BdwM7pmpzEKewPM',
        'AQHRmOqQAoHUgxj7T0et8fn',       
        'AQHRmU74sTU6YP4GsEee8lr',       
        'AQHRmOqQAoHUgxj7T0et8fn'
    )
);

echo "org array <br>";
testudskriv($org_array);
// http://php.net/manual/en/function.array-multisort.php
array_multisort($org_array["uens"], SORT_STRING);
echo "org array sorteret <br>";
testudskriv($org_array);
$copy=array();
$ref="";
for($i=(count($org_array["uens"]))-1; $i>=0;$i--){
    if($ref == $org_array["uens"][$i]){
        $copy[]=$org_array["uens"][$i];
        unset( $org_array["uens"][$i] );
        // http://php.net/manual/en/function.array-key-exists.php
        if(array_key_exists ( $i+1 , $org_array["uens"] ) ){
            $copy[]=$org_array["uens"][$i+1];       
            unset( $org_array["uens"][$i+1] );   
        }       
    }
    else{
        $ref=$org_array["uens"][$i];   
    }   
}
echo "copy array <br>";
testudskriv($copy);
echo "org array renset <br>";
testudskriv($org_array);
// http://php.net/manual/en/function.array-values.php
$org_array["uens"] = array_values($org_array["uens"]);
echo "org array renummeret<br>";
testudskriv($org_array);
?>
Avatar billede arne_v Ekspert
01. maj 2016 - 04:56 #6
Det her eksempel er lidt simplere men monstro ikke ideen kan bruges:


<?php
$a = array('A', 'B', 'C', 'D', 'B', 'C', 'X', 'C');
echo implode(' ', $a) . "\r\n";
$withdupl = array_keys(array_filter(array_count_values($a), function($v) { return$v > 1; }));
echo implode(' ', $withdupl) . "\r\n";
$withoutdupl = array_diff($a, $withdupl);
echo implode(' ', $withoutdupl) . "\r\n";
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester