拆分PHP数组按​​值 [英] split php array by value

查看:91
本文介绍了拆分PHP数组按​​值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的阵列

 阵列
  0 =>
    排列      PRODID =>串'2'(长度= 1)
      '数量'=> INT 2
      '价格'=>字符串'100.00'(长度= 6)
      SID =>字符串'13'(长度= 2)
  2 =>
    排列      PRODID =>字符串'3'(长度= 1)
      '数量'=> INT 1
      '价格'=>字符串'380.00'(长度= 6)
      SID =>字符串'13'(长度= 2)
  1 =>
    排列      PRODID =>串8(长度= 1)
      '数量'=> INT 1
      '价格'=>字符串'300.00'(长度= 6)
      SID =>字符串'24'(长度= 2)

我怎样才能把它分解为多维数组,其中价值SID比赛像这样。

 阵列
  0 =>
    排列      0 =>
        排列
          PRODID =>串'2'(长度= 1)
          '数量'=> INT 2
          '价格'=>字符串'100.00'(长度= 6)
          SID =>字符串'13'(长度= 2)
      1 =>
        排列
          PRODID =>串'2'(长度= 1)
          '数量'=> INT 2
          '价格'=>字符串'100.00'(长度= 6)
          SID =>字符串'13'(长度= 2)  1 =>
    排列      0 =>
        排列
          PRODID =>字符串'7'(长度= 1)
          '数量'=> INT 1
          '价格'=>字符串'200.00'(长度= 6)
          SID =>字符串'15'(长度= 2)


解决方案

  // $输出中数组由SID价值被索引
$输出=阵列();//迭代主阵列上,并创建一个新的子阵,如果
//它不存在,或添加到它,如果它。
的foreach($输入作为subarr $){
  如果(!使用isset($输出[$ subarr ['SID']){
    //新数组希德索引
    $输出[$ subarr ['SID'] =阵列();
  }
  //追加整个数组
  $输出[$ subarr ['SID'] [] = $ subarr;
}

请注意:这会产生比你的描述略有不同的输出,因为它使用了 SID 作为数组键,而不是仅仅从0索引它们:

 阵列
  //注意关键的区别...
  // SID == 13
  13 =>
    排列
      0 =>
        排列
          PRODID =>串'2'(长度= 1)
          '数量'=> INT 2
          '价格'=>字符串'100.00'(长度= 6)
          SID =>字符串'13'(长度= 2)
      1 =>
        排列
          PRODID =>串'2'(长度= 1)
          '数量'=> INT 2
          '价格'=>字符串'100.00'(长度= 6)
          SID =>字符串'13'(长度= 2)
  // SID == 15
  15 =>
    排列      0 =>
        排列
          PRODID =>字符串'7'(长度= 1)
          '数量'=> INT 1
          '价格'=>字符串'200.00'(长度= 6)
          SID =>字符串'15'(长度= 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)

解决方案

// $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)

这篇关于拆分PHP数组按​​值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆