¿Cómo limpiar una matriz de matrices con valores semiduplicados en base a claves en PHP?

fskirschbaum

Supongamos que estamos haciendo algún tipo de raspado y al final podríamos obtener resultados tanto duplicados como semiduplicados.

Dada una matriz de entrada que podría verse un poco así:

$inputArr = [
  [
    'title' => 'Test0',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test5',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test0',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test0.5',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test1',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test1',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test1.5',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test3',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test2',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test3.75',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test3.25',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test2',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test3',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test5',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test3.5',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test4',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test5',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test4.5',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test4',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test5',
    'desc'  => 'Much Longer Than Short Desc',
  ],
];

La matriz resultante debe contener solo matrices con UNA instancia de titlevalor donde desces el valor de cadena más largo mientras se eliminan todos menos uno donde desctiene un valor de longitud de cadena igual a los demás.

por ejemplo, la salida final debería verse así:

$resultArr = [
  [
    'title' => 'Test0',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test0.5',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test1',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test1.5',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test2',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test3',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test3.25',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test3.5',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test3.75',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test4',
    'desc'  => 'Much Longer Than Short Desc',
  ],
  [
    'title' => 'Test4.5',
    'desc'  => 'Short Desc',
  ],
  [
    'title' => 'Test5',
    'desc'  => 'Much Longer Than Short Desc',
  ],
];

He probado varias soluciones diferentes y no me gusta ninguna de ellas. No importa cómo lo haga, se siente como una torpeza y siento que me estoy perdiendo una solución obvia y elegante.

Sé que alguien tendrá una buena sugerencia para algo más limpio que la clasificación, el bucle y el filtrado que he probado.

Casimir e Hippolyte

Puedes hacerlo así:

foreach($inputArr as $item) {

    if ( isset($result[$item['title']]) && strlen($result[$item['title']]['desc']) > strlen($item['desc']) )
        continue;    

    $result[$item['title']] = $item;
}

$result = array_values($result);

print_r($result);

manifestación

Construye una nueva matriz asociativa usando el título como clave. Realiza un ciclo en la matriz original, cuando existe la clave, comprueba si la longitud de la descripción es más larga y continúa de lo contrario, reemplaza el elemento en la matriz de resultados con el elemento actual.

También puede utilizar array_reduce:

$result = array_reduce($inputArr, function ($c, $i) {
    if ( !isset($c[$i['title']]) || strlen($c[$i['title']]['desc']) < strlen($i['desc']) )
        $c[$i['title']] = $i;

    return $c;
});


$result = array_values($result);

print_r($result); 

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

PHP: ¿Cómo extraer valores () de una matriz asociativa con guiones / guiones en sus claves?

¿Cómo fusionar una matriz de claves y matrices de valores en un objeto?

PHP: ¿Cómo comparar claves en una matriz con valores en otra y devolver coincidencias?

Compare claves en matrices y cree una nueva matriz con valores de comparación

Cómo: combinar valores de dos matrices con las mismas claves en PHP

Cómo convertir objetos en una matriz con claves / valores similares en una matriz dentro de esa matriz

Cómo tomar las claves y el valor de una matriz en una matriz con php

Cómo tomar las claves y el valor de una matriz en una matriz con php

¿Cómo configurar una tabla angular de material con claves y valores separados en diferentes matrices en una respuesta json?

Cómo producir json en php con una matriz anidada dentro de varias matrices (para valores coincidentes)

¿Cómo convertir un cierto tipo de cadena en una matriz con claves en php?

JavaScript ¿Cómo obtener valores de una matriz de objetos en una matriz de matrices para que cada submatriz agrupe valores de claves similares?

JavaScript ¿Cómo obtener valores de una matriz de objetos en una matriz de matrices para que cada submatriz agrupe valores de claves similares?

¿Cómo cambiar las claves de una matriz en PHP?

¿Cómo se pueden eliminar claves con valores vacíos en una matriz de objetos en TypeScript?

¿Cómo se pueden eliminar claves con valores vacíos en una matriz de objetos en TypeScript?

¿Cómo iteraré a través de una matriz de objetos con claves y valores en reaccionar y renderizarlos en el JSX (claves y valores)?

Combine 2 matrices en una tercera matriz con claves únicas inconstantes de una matriz

¿Cómo construir las claves de una matriz multidimensional en PHP a partir de los valores de otra matriz?

¿Cómo convierto una lista de correo electrónico separada por comas en una matriz con claves y valores?

¿Cómo puedo hacer una matriz multidimensional de cadenas con claves y valores de cadena en C #?

Tengo una matriz a continuación con algunas mismas claves con diferentes valores. ¿Cómo puedo combinar los mismos valores de claves con esa clave en PHP? Estoy usando WAMP, Codeigniter

¿Cómo convertir una matriz en una matriz multidimensional con claves especiales usando php?

¿Cómo convertir una matriz en una matriz multidimensional con claves especiales usando php?

¿Cómo hacer un grupo de dos matrices con una matriz dada en php?

¿Cómo puedo hacer coincidir los valores de la matriz (por ejemplo, valores de i ++) con las claves en las matrices?

¿Cómo definir una interfaz con claves restringidas a una unión de valores de una propiedad contenida en cada objeto en una matriz de tales objetos?

¿Cómo desestructurar una matriz de objetos en múltiples matrices de sus claves?

Matriz PHP: ¿cómo encontrar todas las claves en una matriz pasando varios valores?

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    Pandas의 CSV 파일을 Pandas 데이터 프레임으로 가져 오기

  3. 3

    uitableview delete button image in iOS

  4. 4

    Manera correcta de agregar referencias al proyecto C # de modo que sean compatibles con el control de versiones

  5. 5

    Swift / Firebase : Facebook 사용자가 계정을 만들 때 Firebase 데이터베이스에 제대로 저장하려면 어떻게해야합니까?

  6. 6

    caída condicional de filas desde un marco de datos de pandas

  7. 7

    Link library in Visual Studio, why two different ways?

  8. 8

    Pagination class not getting applied in html

  9. 9

    Que signifie Decimal (-1)?

  10. 10

    UIButton textLabel with different fonts

  11. 11

    WPF pleine largeur DataGridColumn sur la largeur de DataGrid

  12. 12

    Opción de máquina virtual no reconocida 'MaxPermSize = 512m' cuando se ejecuta Zeppelin

  13. 13

    matplotlib로 그래프를 그리는 동안 커서 위치에서 날짜 / 시간을 볼 수 없습니다. "DateFormatter에서 x = 0 값을 찾았습니다"라는 오류가 발생합니다.

  14. 14

    ¿Es posible en Windows evitar que otras aplicaciones se enganchen en las DLL del sistema?

  15. 15

    Error de la base de datos de Android Firebase: Permiso denegado al depurar en un teléfono

  16. 16

    Pandas: suma filas de DataFrame para columnas dadas

  17. 17

    ggplot2: gráfico con líneas y puntos para problemas de leyenda de dos conjuntos de datos

  18. 18

    ¿Cómo especificar el puerto en el que se aloja una aplicación ASP.NET Core?

  19. 19

    Recherche de la position d'index d'une valeur dans r dataframe

  20. 20

    GPU를 사용하여 ffmpeg 필터의 처리 속도를 가속화하는 방법은 무엇입니까?

  21. 21

    nested observables executed one after the other after termination

CalienteEtiquetas

Archivo