7
votes

Comment diviser le tableau en deux parties égales en utilisant php

Comment diviser un tableau en deux parties égales en utilisant array_slice () dans PHP?

Ceci est ma condition:

première matrice contient: 0-1200

deuxième tableau contient: 1200-fin


0 commentaires

6 Réponses :


5
votes
$array1 = array_slice($input, 0, 1200);
$array2 = array_slice($input, 1200);

4 commentaires

Cela ne devrait-il pas être 0-1201 et 1201?


@Deceze @webarto je ne pense pas. J'ai mis à jour ma réponse à ce que je pense que cela devrait être. Premièrement, Prendre 1200 enregistrements , puis Démarrer à l'enregistrement 1200 qui est vraiment enregistré 1201.


@Rock the op veut "record 0 - 1200" (qui est 1201 enregistrements) et "record 1200 - fin" (qui commencerait à compenser 1201) ... Je pense que l'OP est hors de cette spécification, donc pas de soucis . ;-)


@Deceze, quelque chose comme ça :)



7
votes
$array1 = array_slice($array, 0, 1199);
$array2 = array_slice($array, 1200);

0 commentaires

13
votes

de La documentation de Array_slice , tout ce que vous avez à faire est de donner array_slice Un décalage et une longueur.

Dans votre cas: xxx

En d'autres termes, ce code indique array_slice : xxx

Etant donné que l'index 1200 est l'élément 1201, cela devrait être ce dont vous avez besoin.


0 commentaires

12
votes
$quantity = count($original_collection);

$collection1 = array_slice($original_collection, 0, intval($quantity / 2), true);
$collection2 = array_diff_key($original_collection, $collection1);

2 commentaires

Je sais qu'il a spécifié les chiffres, mais cette option est meilleure, car elle divise réellement n'importe quelle gamme en 2, pas seulement le 2400 du propriétaire de la question. Cela répond au titre de cette question.


Alors, quel est l'avantage d'utiliser les deux array_slice et array_diff_key au lieu d'utiliser simplement array_splice une fois?



7
votes

Je pense array_chunk serait Plus facile, d'autant plus que vous n'avez pas besoin de savoir combien d'éléments sont dans le tableau. xxx


2 commentaires

Vous avez la bonne idée, mais cela traitait la matrice dans de nombreux tableaux de longueur 2, pas diviser la matrice en deux. Au lieu de cela, changez la taille $ à la moitié de la longueur de la matrice (à l'aide de plancher (nombre ($ entrée) / 2) ) de sorte que le résultat serait deux tableaux contenant la moitié des enregistrements.


C'est une bonne idée, mais ne fonctionnera pas au cas où la taille de la matrice sera même numérotée. Il va calculer la matrice en 3 parties: les deux premiers matrices seront une taille égale et le dernier serrera avec un seul élément.



0
votes

Que diriez-vous:

$array1; // your original array with all records
$array2 = array_splice($array1, ceil(count($array1)/2));

// or per your requirement of 1200 in the first array:
$array2 = array_splice($array1, 1200);


0 commentaires