3

我彻底谷歌了,找不到关于如何丢弃 PHP 中的第二维数组只留下第一维数组的解决方案。

从:

array(
  ['type'] => 'func'
  ['function'] => 'Model_Statement_Transaction::sum'
  ['parameters'] =>  
    stdClass(
      statement_id = 8586
      transaction_type = 'raw_flour-import'
      column = 'quantity'
    )
)

至:

array(
  ['type'] => 'func'
  ['function'] => 'Model_Statement_Transaction::sum'
  ['parameters'] => ''
)
4

5 回答 5

13

假设你只想要标量值,你可以简单地做

$result = array_filter($theArray, 'is_scalar')

这将从数组的第一级中删除所有非整数、浮点数、字符串或布尔值的项目。

更多信息:


如果您不需要它是动态的,例如,如果您知道parameters它将是一个非标量,您可以简单地取消设置该值或分配 null 或任何您想要的值,例如

$array['parameters'] = null;
// or
unset($array['parameters']);
于 2012-10-26T13:44:27.673 回答
4

你用array_map

$parameters = new stdClass();
$parameters->statement_id  = 8586 ;
$parameters->transaction_type   = 'raw_flour-import' ;
$parameters->column  = 'quantity' ;

$array = array('type' => 'func',
        'function' => 'Model_Statement_Transaction::sum',
        'parameters' => $parameters);

$array = array_map(function ($v){if (is_array($v) || is_object($v)) {return "";}return $v;}, $array);
var_dump($array);

输出

array
  'type' => string 'func' (length=4)
  'function' => string 'Model_Statement_Transaction::sum' (length=32)
  'parameters' => string '' (length=0)
于 2012-10-24T15:50:08.387 回答
2

多维数组由包含第二级的第一级、包含第三级的第二级构建,依此类推...

获得第一个维度意味着您也将获得第二个级别。简单地说,因为第二个级别是第一个级别的一部分

于 2012-10-24T15:47:06.417 回答
1

我不确定你想要的正是你想要的,但是通过这段代码:

<?php
foreach($array as $item)
{
   if(is_array($item) || is_object($item))
   {
      unset($item); // or just $item = '';
   }
}
?>

您将从给定的 $array 中删除所有第二维数组和对象。

于 2012-10-24T15:48:09.587 回答
1

我知道这是一个老问题,但我正在为搜索中的其他人发布我的解决方案。

此函数将解析原始数组,直到达到 max_d(最大维度),然后它将只返回该值。

<?php
/**
 * @param $v Curent value that is parsed
 * @param $r Return value when the max_d is reached
 * @param int $max_d Maximum dimension
 * @param int $d Current dimension
 *
 * @return array
 */
function parse($v, $r, $max_d = 1, $d = 0) {
  if (is_array($v)) {
    if ($d >= $max_d) {
      return $r;
    } else {
      $d++;
      return array_map(function ($v) use ($max_d, $r,  $d) {
        return parse($v, $r, $max_d, $d);
      }, $v);   
    }
  } else {
    return $v;
  }
}

// Example:
$new_array = array_map(function ($v) {
    return parse($v, "...", 2);
  }, $original_array);
?>
于 2014-05-08T16:05:03.443 回答