3

私はグーグルを徹底的に持っていますが、PHPで2番目の次元の配列を破棄して最初の次元の配列だけを残す方法についての解決策を見つけることができません。

から:

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

多次元配列は、2番目のレベルを含む1番目のレベル、3番目のレベルを含む2番目のレベルなどのビルドです。

最初の次元を取得すると、2番目のレベルも取得することになります。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からすべての2次元配列とオブジェクトを削除します。

于 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 に答える