Puedo usar la siguiente línea de código para el bucle a través de una tabla en mi base de datos:

$items_thread = $connection -> fetch_all($sql);

Y si puedo imprimir la matriz de salida:

print_r($items_thread);

Voy a conseguir esto:

Array
(
    [0] => Array
        (
            [RecipientID] => 3
            [RecipientScreenname] => Tom L
            [RecipientFirstname] => Thomas
            [RecipientEmail] => [email protected].com
        )

    [1] => Array
        (
            [RecipientID] => 3
            [RecipientScreenname] => Tom L
            [RecipientFirstname] => Thomas
            [RecipientEmail] => [email protected].com
        )

    [2] => Array
        (
            [RecipientID] => 1
            [RecipientScreenname] => Lau T
            [RecipientFirstname] => TK
            [RecipientEmail] => [email protected].co.uk
        )

)

Pero me quiere deshacerse de los elementos duplicados en la matriz, por lo que utilizar array_unique

print_r(array_unique($items_thread));

Me sale el extraño resultado por debajo del cual no es bastante que estoy buscando:

Array
(
    [0] => Array
        (
            [RecipientID] => 3
            [RecipientScreenname] => Tom L
            [RecipientFirstname] => Thomas
            [RecipientEmail] => [email protected].com
        )

)

Idealmente, creo que debería volver a esto:

Array
(
    [0] => Array
        (
            [RecipientID] => 3
            [RecipientScreenname] => Tom L
            [RecipientFirstname] => Thomas
            [RecipientEmail] => [email protected].com
        )

    [1] => Array
        (
            [RecipientID] => 1
            [RecipientScreenname] => Lau T
            [RecipientFirstname] => TK
            [RecipientEmail] => [email protected].co.uk
        )

)

¿Qué he de hacer para obtener el derecho? He utilizado mal la sintaxis de PHP/función predeterminada?

  • array_unique() es reducir todo a una sola matriz, porque es la comparación de su interior de las matrices cadenas de caracteres, todos los cuales evaluar a Array. Para cada matriz se considera de la misma. Además, desde el manual: «tenga en cuenta que array_unique() no está diseñado para funcionar en múltiples dimensiones de las matrices.»
  • gracias por tu sugerencia – SELECT DISTINCT RecipientID. No se devuelve el resultado que necesita, a pesar de que pueden obtener el valor único de… puedes echar un vistazo en el post que hice anteriormente aquí – stackoverflow.com/questions/5032645/… gracias.
  • posibles duplicados de Cómo quitar duplicados 2-dimensión de la matriz en PHP?
  • posibles duplicados de Cómo quitar valores duplicados de un array en PHP
InformationsquelleAutor laukok | 2011-02-18

9 Comentarios

  1. 66

    La array_unique función va a hacer esto para usted. Simplemente es necesario añadir la SORT_REGULAR bandera:

    $items_thread = array_unique($items_thread, SORT_REGULAR);

    Sin embargo, como bren sugiere, usted debe hacer esto en SQL, si es posible.

    • He estado buscando esto por cerca de la mitad de un día!
  2. 6

    Que estaría mucho mejor que el filtrado de los duplicados en la consulta SQL. agregar una restricción que se obtiene un ÚNICO recipientID

    • SELECT DISTINCT RecipientID ...
    • gracias… Podría explicar por qué esta forma es mejor que array_unique() ?
    • Ramki: residuos de menos recursos seleccionando sólo las filas que necesite y no agarrar todo a partir de la base de datos y tirar los que no la necesitan.
    • Así que, si tengo matriz como este, array_unique() va a comparar la cadena de Arrayy Array y producir el resultado?
  3. 4

    Para quitar valores duplicados entonces podemos usar array_unique() función. La funcionalidad de que se acepte una matriz y devuelve otra matriz sin valores duplicados.

    Descripción General de array_unique() es la siguiente:

    General Format = array array_unique(array $array [, int $sort_flags=sort_string] )
    Parameters     = array: Input array ->sort_flags:
        The second optional parameter is used to compare items as follows
             1. SORT_REGULAR - Normal
             2. SORT_NUMERIC - Numerically
             3. SORT_STRING - As
             4. string  SORT_LOCALE_STRING - As string, based on the current locale.
    Return Value   = Another array without duplicate values 

    Ejemplo 1:

    <?php
    $array=array('cricket'=>11,'football'=>11,'chess'=>2);
    echo"<br/><b>Initially the values of $array is:</b><br/>";
    var_dump($array);
    echo"<br/><b>After removing the duplicates:</b><br/>";
    print_r(array_unique($array));
    ?>

    De salida:

    Initially the values of $array is:
    array(3) {
      ["cricket"] => int(11)
      ["football"] => int(11)
      ["chess"] => int(2)
    }
    
    After removing the duplicates:
    Array
    (
        [cricket] => 11
        [chess] => 2
    )
  4. 1

    Intente esto:

    $data = array_map('unserialize', array_unique(array_map('serialize', $data)));

    Salidas de los siguientes:

    Array
    (
        [0] => Array
            (
                [RecipientID] => 3
                [RecipientScreenname] => Tom L
                [RecipientFirstname] => Thomas
                [RecipientEmail] => [email protected].com
            )
    
        [2] => Array
            (
                [RecipientID] => 1
                [RecipientScreenname] => Lau T
                [RecipientFirstname] => TK
                [RecipientEmail] => [email protected].co.uk
            )
    )

    Pero también creo que se debería implementar esto en su base de datos. También, comprobar mi otra respuesta y soluciones.

    • gracias por esto! ¿qué cerca de $items_thread = array_unique($items_thread, SORT_REGULAR); que devuelve el mismo resultado que el código?
    • Yo nunca lo he hecho, ¿es realmente devuelven el mismo resultado? Si sí, ¡genial!
    • He leído el manual y que la bandera se parece a entregar los resultados correctos, sin embargo ten en cuenta que solo está disponible en PHP >= 5.2.9.
    • gracias. Estoy en php 5.3.x y mi vida será de 5.3.x también, así que creo que estoy a salvo! muchas gracias!
  5. 1

    Puede utilizar este código y espero que te ayude. Es totalmente de trabajo:

    $array = array(1,1,2,3,4,4,4,5);
    $temp=array();
    
    for($i=0; $i<=count($array); $i++)
     {
    
        if($array[$i] != '')
        {
            for($j=$i+1; $j<=count($array); $j++ )
            {
                if($array[$i]==$array[$j])
                {
                    $array[$j] = '';
                }
                else
                {
                    $temp[$array[$i]]=$array[$i];
                }
    
             }
    
        }
    }
    
    print_r($temp); 
  6. 0

    Puede utilizar de forma regular arrays de php para lograr esto.

    $newArray = array();
    foreach ($origArray as $user)
    {
       $newArray[$user['RecipientID']] = $user;
    }
  7. 0

    Por favor marque a continuación el código, espero que esto sea de ayuda completa para usted.

    $resultArray = uniqueAssocArray($actualArray, 'RecipientID');
    
    function uniqueAssocArray($array, $uniqueKey) {
    if (!is_array($array)) {
        return array();
    }
    $uniqueKeys = array();
    foreach ($array as $key => $item) {
        $groupBy=$item[$uniqueKey];
        if (isset( $uniqueKeys[$groupBy]))
        {
            //compare $item with $uniqueKeys[$groupBy] and decide if you 
            //want to use the new item
            $replace= false; 
        }
        else
        {
            $replace=true;
        }
        if ($replace) $uniqueKeys[$groupBy] = $item;   
    }
    return $uniqueKeys;

    }

  8. 0
    $res1       = mysql_query("SELECT * FROM `luggage` where r_bus_no='".$tour_id."' and `date1`='$date' AND `login_id`='".$_SESSION['login_id']."'");
    }
    ///create a array to store value
    $city_arr   = array();
    if(mysql_num_rows($res1)>0)
    {
        while($row1 = mysql_fetch_array($res1))
        {
    
    ///insert the value in array use the array_push function
                array_push($city_arr,$row1['r_to']);
        }
    
    ////remove the duplicate entry in array use the array_unique function
        $a          = array_unique($city_arr);
        echo "<option value='' selected='selected'> -- Select City ---</option>";
        foreach($a as $b)
        {
        ?>
        <option value="<?php echo $b ;?>"><?php echo city($b); ?></option>
        <?php       
        }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here