PHP или MySQL удалить массив повторяющихся записей - PullRequest
0 голосов
/ 09 февраля 2012

везде я нашел решения для удаления повторяющихся записей в php или mysql. Но все эти решения удалили всю строку, а я просто хочу удалить значение столбца. например у меня есть этот SELECT в MySQL:

SELECT HE_FRUIT as fruit, CA_FRUIT as candy, CA_FRUIT_NAME as name, CA_FRUIT_color as color 
FROM fruits LEFT JOIN candy ON HE_FRUIT_ID = CA_FRUIT_ID 
WHERE CA_FRUIT_COUNTRY LIKE '%usa%' 
GROUP BY CA_FRUIT_TITLE 
ORDER BY CA_FRUIT_PRIO, CA_FRUIT_HE

Я печатаю массив и получаю это:

array
  0 => 
      array
      fruit = "APPLE"
      candy = "lolly"
      name = "xxx"
      color = "green"
   1 => 
      array
      fruit = "APPLE"
      candy = "gum"
      name = "xxx"
      color = "blue"
  2 => 
      array
      fruit = "APPLE"
      candy = "candy"
      name = "xxx"
      color = "red"
  3 => 
      array
      fruit = "BANANA"
      candy = "lolly"
      name = "xxx"
      color = "yellow"

То, что я хочу иметь:

  0 => 
      array
      fruit = "APPLE"
      candy = "lolly"
      name = "xxx"
      color = "green"
   1 => 
      array
      fruit = ""
      candy = "gum"
      name = "xxx"
      color = "blue"
  2 => 
      array
      fruit = ""
      candy = "candy"
      name = "xxx"
      color = "red"
  3 => 
      array
      fruit = "BANANA"
      candy = "lolly"
      name = "xxx"
      color = "yellow"

Таким образом, нужно удалить только ценность фрукта-столбца, но все остальное должно остаться.

У кого-нибудь есть идеи, как я мог бы решить эту проблему, без лишнего кода?

Заранее большое спасибо?

Ответы [ 3 ]

1 голос
/ 09 февраля 2012

Попробуйте это:

<?php

    $data = array(
      0 => array(
          'fruit' => "APPLE",
          'candy' => "lolly",
          'name' => "xxx",
          'color' => "green"
      ),
      1 => array(
          'fruit' => "APPLE",
          'candy' => "gum",
          'name' => "xxx",
          'color' => "blue"
      ),
      2 => array(
          'fruit' => "APPLE",
          'candy' => "candy",
          'name' => "xxx",
          'color' => "red"
      ),
      3 => array(
          'fruit' => "BANANA",
          'candy' => "lolly",
          'name' => "xxx",
          'color' => "yellow"
      )
    );

    foreach($data as $i => $dataRow)
    {
        foreach($dataRow as $fieldName => $fieldValue)
        {
            for($j=0; $j<$i; $j++)
            {
                if($data[$j][$fieldName] == $fieldValue)
                {
                    $data[$i][$fieldName] = '';
                }
            }
        }
    }

    print_r($data);

?>
0 голосов
/ 09 февраля 2012

SELECT DISTINCT или array_unique(), и друзья здесь вам не помогут: вы не хотите подавлять дублирующиеся строки, вы хотите манипулировать ими, чтобы получить другой фрукт : пустая строка.

Так что вам в конечном итоге понадобится цикл:

//Assumes your resultset is in $myarray
$fruits=array();

for ($i=0;$i<sizeof($myarray);$i++)
  if (in_array($myarray[$i]['fruit'],$fruits)) $myarray[$i]['fruit']='';
  else $fruits[]=$myarray[$i]['fruit'];
0 голосов
/ 09 февраля 2012

Вам нужен массив результатов, чтобы быть только одномерным?Если нет, я бы посоветовал вам обработать массив в многомерный массив, например, так:

$array=array(
  0 => 
      array(
      'fruit' => "APPLE",
      'candy' => "lolly",
      'name' => "xxx",
      'color' => "green"),
  1 => 
      array(
      'fruit' => "APPLE",
      'candy' => "gum",
      'name' => "xxx",
      'color' => "blue"),
  2 => 
      array(
      'fruit' => "APPLE",
      'candy' => "candy",
      'name' => "xxx",
      'color' => "red"),
  3 => 
      array(
      'fruit' => "BANANA",
      'candy' => "lolly",
      'name' => "xxx",
      'color' => "yellow")
);

$output = array();
foreach( $array as $arrayItem ) {
    if( !isset( $output[$arrayItem['fruit']]) ) {
        $output[$arrayItem['fruit']] = array();
    }
    $outputItem = $arrayItem;
    unset( $outputItem['fruit'] );
    $output[$arrayItem['fruit']][] = $outputItem;
}

Вы можете добиться того же эффекта, просматривая исходный набор данных, вам не нужносоздайте одномерный массив PHP и затем обработайте его снова.Это просто, чтобы проиллюстрировать пример.

...