Php 将阵列复制/修剪到特定大小

Php 将阵列复制/修剪到特定大小,php,multidimensional-array,Php,Multidimensional Array,编辑:明确多维数组需要它(在任何深度级别) 我需要减少数组的大小,以只获得其中的一部分,但这需要递归地完成。例如,以以下情况为例: $a = array( 'a', 'b' => array( 'x' => array( 'aleph', 'bet' ), 'y'), 'c', 'd', 'e' ); 我需要的是,仅复制4个元素后,我将得到以下结果数组: $a = array( 'a', 'b'

编辑:明确多维数组需要它(在任何深度级别)

我需要减少数组的大小,以只获得其中的一部分,但这需要递归地完成。例如,以以下情况为例:

$a = array(
  'a',
  'b' => array(
    'x' => array(
      'aleph',
      'bet'
      ),
    'y'), 
  'c', 
  'd', 
  'e'
);
我需要的是,仅复制4个元素后,我将得到以下结果数组:

$a = array(
  'a',
  'b' => array('x' => array(
      'aleph'
    ),
  ), 
);
而不是

$a = array(
  'a',
  'b' => array('x' => array(
      'aleph',
      'bet'
      ),
    'y'), 
  'c', 
  'd', 
);
我如何做到这一点


谢谢

您可以尝试
**注意:双重维度

    $a = array("a","b" => array('x','y'),"c","d","e");
$new = __cut($a);


function __cut($array, $max = 4) {
    $total = 0;
    $new = array();
    foreach ( $array as $key => $value ) {
        if (is_array($value)) {
            $total ++;
            $diff = $max - $total;
            $slice = array_slice($value, 0, $diff);
            $total += count($slice);
            $new[$key] = $slice;
        } else {
            $total ++;
            $new[$key] = $value;
        }
        if ($total >= $max)
            break;
    }
    return $new;
}

var_dump($new);
输出

array
  0 => string 'a' (length=1)
  'b' => 
    array
      0 => string 'x' (length=1)
      1 => string 'y' (length=1)

应该可以正常工作

您的示例包含2个或3个值,这取决于您是将数组计算为一个,还是将数组计算为包含元素的数量。但是,任何地方都没有4个值:?我想你可以说涉及到4个键,a、b、x、yi各一个,如果你在第二个代码块中复制数组并运行count($arr,count\u RECURSIVE);在上面,你会看到结果是“4”…很酷,但我在寻找多维算法,而不是二维算法…)
function arrayTrim($array, $size,  $finalArray = null){
    global $count;
    foreach ($array AS $key => $val){
        if($size == $count)
            return $finalArray;
        $count++;
        if(is_array($val)){
            $finalArray[$key] = array();
            $finalArray[$key] = arrayTrim ($val, $size,  $finalArray[$key]);
        }
        else
            $finalArray[$key] = $val;
    }
    return $finalArray;
}
$a = array( "a"=> array('xa', 'ya'), "b" => array('x', 'y'),  "c", "d", "e" );

print_r(arrayTrim($a, 4));