按列值对二维数组中的数据进行分组,并将原始行推入其专用组中

发布于 2025-01-08 03:44:11 字数 1291 浏览 7 评论 0原文

我有这个数组,

array
  0 => 
    array

      'prodid' => string '2' (length=1)
      'qty' => int 2
      'price' => string '100.00' (length=6)
      'sid' => string '13' (length=2)
  2 => 
    array

      'prodid' => string '3' (length=1)
      'qty' => int 1
      'price' => string '380.00' (length=6)
      'sid' => string '13' (length=2)
  1 => 
    array

      'prodid' => string '8' (length=1)
      'qty' => int 1
      'price' => string '300.00' (length=6)
      'sid' => string '24' (length=2)

如何将其拆分为一个多维数组,其中值“sid”像这样匹配。

array
  0 => 
    array

      0 => 
        array
          'prodid' => string '2' (length=1)
          'qty' => int 2
          'price' => string '100.00' (length=6)
          'sid' => string '13' (length=2)
      1 => 
        array
          'prodid' => string '2' (length=1)
          'qty' => int 2
          'price' => string '100.00' (length=6)
          'sid' => string '13' (length=2)

  1 => 
    array

      0 => 
        array
          'prodid' => string '7' (length=1)
          'qty' => int 1
          'price' => string '200.00' (length=6)
          'sid' => string '15' (length=2)

I have this array

array
  0 => 
    array

      'prodid' => string '2' (length=1)
      'qty' => int 2
      'price' => string '100.00' (length=6)
      'sid' => string '13' (length=2)
  2 => 
    array

      'prodid' => string '3' (length=1)
      'qty' => int 1
      'price' => string '380.00' (length=6)
      'sid' => string '13' (length=2)
  1 => 
    array

      'prodid' => string '8' (length=1)
      'qty' => int 1
      'price' => string '300.00' (length=6)
      'sid' => string '24' (length=2)

How can i split it in to a multi dimentional array where the values 'sid' match like so.

array
  0 => 
    array

      0 => 
        array
          'prodid' => string '2' (length=1)
          'qty' => int 2
          'price' => string '100.00' (length=6)
          'sid' => string '13' (length=2)
      1 => 
        array
          'prodid' => string '2' (length=1)
          'qty' => int 2
          'price' => string '100.00' (length=6)
          'sid' => string '13' (length=2)

  1 => 
    array

      0 => 
        array
          'prodid' => string '7' (length=1)
          'qty' => int 1
          'price' => string '200.00' (length=6)
          'sid' => string '15' (length=2)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

撩心不撩汉 2025-01-15 03:44:11

您选择要分组的值作为新数组的键,并将成员推送到其中

$new = array();
foreach($array as $member)
{
    $key = $member['group-value'];
    $new[$key][] = $member;
}

,然后使用 array_values 从新数组中提取裸值:

$new = array_values($new);

就是这样。如果你想节省最后一部分,你还可以自己创建键的映射及其数字索引:

$new = array();
$keys = array();
foreach($array as $member)
{
    $key = $member['group-value'];
    isset($keys[$key]) || $keys[$key] = count($keys);        
    $new[$keys[$key]][] = $member;
}

You pick the value you want to group with as key for a new array and push the member to it

$new = array();
foreach($array as $member)
{
    $key = $member['group-value'];
    $new[$key][] = $member;
}

You then extract the bare values from the new array by using array_values:

$new = array_values($new);

And that's it. If you want to spare the last part, you can also create the mapping of keys and it's numerical index on your own:

$new = array();
$keys = array();
foreach($array as $member)
{
    $key = $member['group-value'];
    isset($keys[$key]) || $keys[$key] = count($keys);        
    $new[$keys[$key]][] = $member;
}
惟欲睡 2025-01-15 03:44:11

适用于 PHP5.3+

$result = array_reduce (
  $array,
  function ($item, $result) {
    if (!isset($result[$item['sid']])) $result[$item['sid']] = array();
    $result[$item['sid']][] = $item;
    return $result;
  },
  array()
)

For PHP5.3+

$result = array_reduce (
  $array,
  function ($item, $result) {
    if (!isset($result[$item['sid']])) $result[$item['sid']] = array();
    $result[$item['sid']][] = $item;
    return $result;
  },
  array()
)
猫卆 2025-01-15 03:44:11
// $ouput array will be indexed by the 'sid' value
$output = array();

// Iterate over the main array and create a new subarray if 
// it doesn't already exist, or add to it if it does.
foreach($input as $subarr) {
  if (!isset($output[$subarr['sid']]) {
    // New array indexed by sid
    $output[$subarr['sid']] = array();
  }
  // Append the whole array
  $output[$subarr['sid']][] = $subarr;
}

注意:这会产生与您描述的稍有不同的输出,因为它使用 sid 作为数组键,而不是仅仅从 0 开始索引它们:

array
  // Note key difference...
  // sid == 13
  13 => 
    array
      0 => 
        array
          'prodid' => string '2' (length=1)
          'qty' => int 2
          'price' => string '100.00' (length=6)
          'sid' => string '13' (length=2)
      1 => 
        array
          'prodid' => string '2' (length=1)
          'qty' => int 2
          'price' => string '100.00' (length=6)
          'sid' => string '13' (length=2)
  // sid == 15
  15 => 
    array

      0 => 
        array
          'prodid' => string '7' (length=1)
          'qty' => int 1
          'price' => string '200.00' (length=6)
          'sid' => string '15' (length=2)
// $ouput array will be indexed by the 'sid' value
$output = array();

// Iterate over the main array and create a new subarray if 
// it doesn't already exist, or add to it if it does.
foreach($input as $subarr) {
  if (!isset($output[$subarr['sid']]) {
    // New array indexed by sid
    $output[$subarr['sid']] = array();
  }
  // Append the whole array
  $output[$subarr['sid']][] = $subarr;
}

Note: this produces slightly different output than you described, in that it uses the sid as array keys rather than just indexing them from 0:

array
  // Note key difference...
  // sid == 13
  13 => 
    array
      0 => 
        array
          'prodid' => string '2' (length=1)
          'qty' => int 2
          'price' => string '100.00' (length=6)
          'sid' => string '13' (length=2)
      1 => 
        array
          'prodid' => string '2' (length=1)
          'qty' => int 2
          'price' => string '100.00' (length=6)
          'sid' => string '13' (length=2)
  // sid == 15
  15 => 
    array

      0 => 
        array
          'prodid' => string '7' (length=1)
          'qty' => int 1
          'price' => string '200.00' (length=6)
          'sid' => string '15' (length=2)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文