2016-11-23 10 views
0

Ich versuche, ein multidimensionales Array basierend auf einem anderen Array von Werten zu teilen So etwas wie array_chunk($multi_array, array(1,3,7)). Verwaltet, um etwas zu diesem Thema hier zu finden array_chunk_multi. Nur dass es nicht für multidimensionale Arrays funktioniert. Momentan teilt es sie nur so auf, dass ich NULL zu allen Werten bekomme.Split multidimensionales Array mit Array_chunk basierend auf einem anderen Array

PHP

function array_chunk_array(array $values, array $sizes) 
{ 
    $results = []; 
    foreach ($sizes as $size) { 
     $current = []; 
     while (count($values) > 0 && count($current) < $size) { 
      $current[] = array_unshift($values); 
     } 
     $results[] = $current; 
    } 
    return $results; 
} 

$input_sub_arr = range('1', '6'); 
$input_sub_array = array(); 
foreach ($input_sub_arr as $answer) { 
    $input_sub_array[] = 'answer-'.$answer; 
} 
$input_sub_answers = array(); 
foreach ($input_sub_array as $input_sub_answer) { 
    $input_sub_answers[$input_sub_answer] = array('attributes' => array('correct')); 
} 
//var_dump($input_sub_answers); 
$new_answer = array_chunk_array($input_sub_answers, array(4,2)); 
var_dump($new_answer); 

CURRENT ARRAY

array(6) { 
    [0]=> 
    array(3) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    } 
    [1]=> 
    array(2) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    ["answerText"]=> 
    array(1) { 

    } 
    } 
    [2]=> 
    array(3) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    ["answerText"]=> 
    array(2) { 

    } 
    } 
    [3]=> 
    array(3) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    ["answerText"]=> 
    array(2) { 

    } 
    } 
    [4]=> 
    array(3) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    ["answerText"]=> 
    array(2) { 

    } 
    } 
    [5]=> 
    array(3) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    ["answerText"]=> 
    array(2) { 

    } 
    } 
} 

ERWARTENDE OUTPUT

array(4) { 
    [0]=> 
    array(3) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    } 
    [1]=> 
    array(2) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    ["answerText"]=> 
    array(1) { 

    } 
    } 
    [2]=> 
    array(3) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    ["answerText"]=> 
    array(2) { 

    } 
    } 
    [3]=> 
    array(3) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    ["answerText"]=> 
    array(2) { 

    } 
    } 
} 
array(2) { 
    [1]=> 
    array(3) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    ["answerText"]=> 
    array(2) { 
     ["@attributes"]=> 
     array(1) { 

     } 
    } 
    } 
    [2]=> 
    array(3) { 
    ["@attributes"]=> 
    array(2) { 

    } 
    ["answerText"]=> 
    array(2) { 

    } 
    } 
} 

CURRENT OUTPUT

array(2) { 
    [0]=> 
    array(4) { 
    [0]=> 
    NULL 
    [1]=> 
    NULL 
    [2]=> 
    NULL 
    [3]=> 
    NULL 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    NULL 
    [1]=> 
    NULL 
    } 
} 
+0

'array_chunk_array ($ input_sub_answers, array (4,2));' sollte 'array_chunk ($ input_sub_answers, array (4,2)) sein;' und 'array_chunk' brauchen Integer, aber Sie erhalten ein Array als Parameter.array_chunk ist hier zwingend erforderlich? –

+0

@ChoncholMahmud Ich versuche, eine benutzerdefinierte Funktion 'array_chunk_array' die Version, die ein Array als zweiter Parameter anstelle von Ganzzahl akzeptieren. – user3467855

+0

Wo erstellen Sie die 'array_chunk_array' Funktion? Könnten Sie diese Funktionen hinzufügen? –

Antwort

1

Was hier wirklich verwendet werden sollte, ist array_splice:

$vl = [1,1,1,1,2,2,3,3,3]; 
$sz = [4, 2, 3]; 
function array_chunk_array(array $values, array $sizes) 
{ 
    $result = []; 

    foreach ($sizes as $s) { 
     $result[] = array_splice($values, 0, $s); 
    } 

    return $result; 
} 

echo'<pre>',print_r(array_chunk_array($vl, $sz)),'</pre>'; 
Verwandte Themen