【问题标题】:Grouping element array php based first character value基于第一个字符值的分组元素数组php
【发布时间】:2018-05-10 16:15:22
【问题描述】:

我有一个基于数组的 MySql 数据库。 这是数组。

[
  0 => [
    'id' => '1997'
    'lokasi_terakhir' => 'YA4121'
  ]
  1 => [
    'id' => '1998'
    'lokasi_terakhir' => 'PL2115'
  ]
  2 => [
    'id' => '1999'
    'lokasi_terakhir' => 'PL4111'
  ]
]

如何获取按第一个字符分组的元素lokasi_terakhir?最好的方法是什么?

这是目标:

[
   "Y" => 1,
   "P" => 2
]

请指教

【问题讨论】:

  • 如果在 SQL 数据库中,为什么不把它分组呢?
  • 写一些代码来做:为你的结果创建一个新数组,循环遍历数据库数组,使用foreach。然后提取数组[INDEX]['lokasi_terakhir']的值,取它的第一个字母,增加结果数组[FIRSTLETTER] + 1。
  • @FadlyDzil 如果您的问题中没有包含编码尝试,您的问题可能会吸引更多的反对票,并且可能会因为太宽泛而被关闭。请花点时间在您的问题中添加您在发布之前尝试过的内容。

标签: php mysql arrays


【解决方案1】:

您可以像这样对这些项目进行分组:

    $array = [
      0 => [
        'id' => '1997',
        'lokasi_terakhir' => 'YA4121'
      ],
      1 => [
        'id' => '1998',
        'lokasi_terakhir' => 'PL2115'
      ],
      2 => [
        'id' => '1999',
        'lokasi_terakhir' => 'PL4111'
      ]
    ];

$result = array();
foreach($array as $item) {
  $char = substr($item['lokasi_terakhir'], 0, 1);
  if(!isset($result[$char])) {
    $result[$char] = array();
  }

  $result[$char][] = $item;
}

【讨论】:

    【解决方案2】:
    <?php
    $array=[
        0 => [
            'id' => '1997',
        'lokasi_terakhir' => 'YA4121'
      ],
      1 => [
        'id' => '1998',
        'lokasi_terakhir' => 'PL2115'
      ],
      2 => [
        'id' => '1999',
        'lokasi_terakhir' => 'PL4111'
      ]
    ];
    
    foreach($array as $row){
        $newArray[]=$row['lokasi_terakhir'][0];
    
    }
    
    print_r(array_flip(array_unique($newArray)));
    

    此代码获取字段 lokasi_terakhir 的第一个字母,获取唯一值以避免重复,并翻转数组以获得所需的结果。

    输出是这样的:

    Array ( [Y] => 0 [P] => 1 )
    

    【讨论】:

      【解决方案3】:

      这里有两种改进的方法。您选择哪一种取决于您的个人喜好(您不会找到更好的方法)。

      首先,我正在迭代数组,将lokasi_terakhir 值的第一个字符声明为$result 声明中的键。如果输出数组中尚不存在该键,则必须将其声明/设置为1。在它被实例化之后,它可以被递增——我使用的是“预递增”。

      第二种方法首先使用每个子数组中lokasi_terakhir 值的第一个字符映射一个新数组,然后计算每个字母的每次出现次数。

      (Demonstrations Link)

      方法#1:(foreach)

      foreach($array as $item){
          if(!isset($result[$item['lokasi_terakhir'][0]])){
              $result[$item['lokasi_terakhir'][0]]=1;  // instantiate
          }else{
              ++$result[$item['lokasi_terakhir'][0]];  // increment
          }
      }
      var_export($result);
      

      方法#2:(功能性)

      var_export(array_count_values(array_map(function($a){return $a['lokasi_terakhir'][0];},$array)));
      // generate array of single-character elements, then count occurrences
      

      输出:(来自任一)

      array (
        'Y' => 1,
        'P' => 2,
      )
      

      【讨论】:

        猜你喜欢
        • 2011-09-07
        • 1970-01-01
        • 2021-01-01
        • 2016-12-25
        • 2018-01-02
        • 1970-01-01
        • 2022-01-10
        • 1970-01-01
        • 2016-12-31
        相关资源
        最近更新 更多