【问题标题】:How to group a column into comma-separated string based on multiple common key value pair?如何根据多个公共键值对将列分组为逗号分隔的字符串?
【发布时间】:2020-04-27 15:13:35
【问题描述】:

这是我更新的问题。我有一个对象数组,如下所示:

array:113 [
  0 => Data\Entity {#1024
    -manufacturer: "Test1"
    -colour: "polar-silber"
    -design: "Bavaro"
    -diameter: 17
  }
  1 => Data\Entity {#1524
    -manufacturer: "Test1"
    -colour: "polar-silber"
    -design: "Bavaro"
    -diameter: 18
  }
  2 => Data\Entity {#1724
    -manufacturer: "Test2"
    -colour: "polar-silber"
    -design: "Drive"
    -diameter: 17
  }

我必须根据常见的制造商、颜色和设计制作一个逗号分隔的直径。

我的最终输出应该是这样的:

  array:5 [
  0 => Data\Entity {#1024
    -manufacturer: "Test1"
    -colour: "polar-silber"
    -design: "Bavaro"
    -diameter: "17, 18"
  }
  1 => Data\Entity {#1724
    -manufacturer: "Test2"
    -colour: "polar-silber"
    -design: "Drive"
    -diameter: "17"
  }

到目前为止我尝试过的是:

$manufacturer = $wheel->getManufacturer();
$design = $wheel->getDesign();
$colour = $wheel->getColour();

$key = $manufacturer. "_". $design. "_". $colour;

$wheelsArray[$key] = $wheel;
if (array_key_exists($key, $wheelsArray)) {

    $dia = $wheelsArray[$key]->getDiameter();
    $dia .= ', ' . $wheel->getDiameter();
    $wheelsArray[$key]->setDiameter($dia);
}

在这里,我得到的是直径:“17, 17”而不是“17, 18”

谁能帮我看看我犯了什么错误?

【问题讨论】:

  • $wheelsArray[$key] = $wheel; 应该在里面吗?
  • 是的,我想是的。我正在尝试将新直径附加到以前的直径

标签: php arrays object grouping


【解决方案1】:

您可以遍历数组并将制造商属性设置为新数组的键:

https://paiza.io/projects/_ZzfxgMJjKIJIZAGSILmQA

<?php    

$de1 = new stdClass();
$de1->manufacturer = "Test1";
$de1->colour = "polar-silber";
$de1->design = "Bavaro";
$de1->diameter = 17;

$de2 = new stdClass();
$de2->manufacturer = "Test1";
$de2->colour = "polar-silber";
$de2->design = "Bavaro";
$de2->diameter = 18;

$de3 = new stdClass();
$de3->manufacturer = "Test2";
$de3->colour = "polar-silber";
$de3->design = "Drive";
$de3->diameter = 17;

$arr = [$de1,$de2,$de3];

$resArr = [];
foreach($arr as $key => $val){
    if(isset($resArr[$val->manufacturer])){
        $resArr[$val->manufacturer]->diameter .= ", ".$val->diameter;
    } else{
        $resArr[$val->manufacturer] = $val;
    }
}

print_r($resArr); 

?>

结果:

Array
(
    [Test1] => stdClass Object
        (
            [manufacturer] => Test1
            [colour] => polar-silber
            [design] => Bavaro
            [diameter] => 17, 18
        )

    [Test2] => stdClass Object
        (
            [manufacturer] => Test2
            [colour] => polar-silber
            [design] => Drive
            [diameter] => 17
        )

)

【讨论】:

  • 这个过滤器只针对制造商,颜色和设计怎么样?
  • @nas 相同的概念,只需遍历数组并按您想要的任何键进行分组。
  • 是的,看起来不错。但还有一个。直径重复。检查下面的链接paiza.io/projects/xOy16oJlTfGec3Seb5bQCQ
猜你喜欢
  • 1970-01-01
  • 2018-11-11
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
相关资源
最近更新 更多