Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按值拆分php数组_Php_Arrays - Fatal编程技术网

按值拆分php数组

按值拆分php数组,php,arrays,Php,Arrays,我有这个数组 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' (lengt

我有这个数组

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)

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

$new = array();
foreach($array as $member)
{
    $key = $member['group-value'];
    $new[$key][] = $member;
}
然后使用
array\u 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;
}

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

$new = array();
foreach($array as $member)
{
    $key = $member['group-value'];
    $new[$key][] = $member;
}
然后使用
array\u 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;
}
注意:这会产生与您描述的稍有不同的输出,因为它使用
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)
注意:这会产生与您描述的稍有不同的输出,因为它使用
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)
对于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()
)
对于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()
)