Array slice function that works with associative arrays (keys):
function array_slice_assoc($array,$keys) {
return array_intersect_key($array,array_flip($keys));
}(PHP 4, PHP 5, PHP 7, PHP 8)
array_slice — Extrai uma parcela de um array
array_slice() retorna a sequência de elementos
de um array delimitado pelos parâmetros
offset e length.
arrayO array de entrada.
offset
Se offset for não negativo, a sequência iniciará
no início do array.
Se offset for negativo, a sequência iniciará
a partir do fim do array.
Nota:
O parâmetro
offsetdenota uma posição dentro do array, não das chaves.
length
Se length for positivo,
então a sequência terá até essa quantidade de elementos.
Se o array for mais curto que length,
então somente os elementos presentes serão retornados.
Se length for negativo então a sequência
conterá até essa quantidade de elementos do final do array.
Se esse parâmetro for omitido, a sequência conterá todos os elementos
a partir de offset até o final do
array.
preserve_keysNota:
array_slice() não irá reordenar ou resetar os índices inteiros do array por padrão. Este comportamento pode ser alterado ao informar
preserve_keysparatrue. Chaves string são sempre preservados, independente do parâmetro.
Retorna a parcela. Se o offset for maior que o tamanho do array, um array vazio é retornado.
Exemplo #1 Exemplos de array_slice()
<?php
$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 2); // retorna "c", "d", e "e"
$output = array_slice($input, -2, 1); // retorna "d"
$output = array_slice($input, 0, 3); // retorna "a", "b", e "c"
// Obverse as diferenças nas chaves retornadas
print_r(array_slice($input, 2, -1));
print_r(array_slice($input, 2, -1, true));
?>O exemplo acima produzirá:
Array
(
[0] => c
[1] => d
)
Array
(
[2] => c
[3] => d
)
Exemplo #2 array_slice() e arrays baseados em 1
<?php
$input = array(1 => "a", "b", "c", "d", "e");
print_r(array_slice($input, 1, 2));
?>O exemplo acima produzirá:
Array
(
[0] => b
[1] => c
)
Exemplo #3 array_slice() com chaves mistas
<?php
$ar = array('a'=>'apple', 'b'=>'banana', '42'=>'pear', 'd'=>'orange');
print_r(array_slice($ar, 0, 3));
print_r(array_slice($ar, 0, 3, true));
?>O exemplo acima produzirá:
Array
(
[a] => apple
[b] => banana
[0] => pear
)
Array
(
[a] => apple
[b] => banana
[42] => pear
)
Array slice function that works with associative arrays (keys):
function array_slice_assoc($array,$keys) {
return array_intersect_key($array,array_flip($keys));
}<?php
// CHOP $num ELEMENTS OFF THE FRONT OF AN ARRAY
// RETURN THE CHOP, SHORTENING THE SUBJECT ARRAY
function array_chop(&$arr, $num)
{
$ret = array_slice($arr, 0, $num);
$arr = array_slice($arr, $num);
return $ret;
}If you want an associative version of this you can do the following:
function array_slice_assoc($array,$keys) {
return array_intersect_key($array,array_flip($keys));
}
However, if you want an inverse associative version of this, just use array_diff_key instead of array_intersect_key.
function array_slice_assoc_inverse($array,$keys) {
return array_diff_key($array,array_flip($keys));
}
Example:
$arr = [
'name' => 'Nathan',
'age' => 20,
'height' => 6
];
array_slice_assoc($arr, ['name','age']);
will return
Array (
'name' = 'Nathan',
'age' = 20
)
Where as
array_slice_assoc_inverse($arr, ['name']);
will return
Array (
'age' = 20,
'height' = 6
)based on worldclimb's arem(), here is a recursive array value removal tool that can work with multidimensional arrays.
function remove_from_array($array,$value){
$clear = true;
$holding=array();
foreach($array as $k => $v){
if (is_array($v)) {
$holding [$k] = remove_from_array ($v, $value);
}
elseif ($value == $v) {
$clear = false;
}
elseif($value != $v){
$holding[$k]=$v; // removes an item by combing through the array in order and saving the good stuff
}
}
if ($clear) return $holding; // only pass back the holding array if we didn't find the value
}array_slice can be used to remove elements from an array but it's pretty simple to use a custom function.
One day array_remove() might become part of PHP and will likely be a reserved function name, hence the unobvious choice for this function's names.
<?
function arem($array,$value){
$holding=array();
foreach($array as $k => $v){
if($value!=$v){
$holding[$k]=$v;
}
}
return $holding;
}
function akrem($array,$key){
$holding=array();
foreach($array as $k => $v){
if($key!=$k){
$holding[$k]=$v;
}
}
return $holding;
}
$lunch = array('sandwich' => 'cheese', 'cookie'=>'oatmeal','drink' => 'tea','fruit' => 'apple');
echo '<pre>';
print_r($lunch);
$lunch=arem($lunch,'apple');
print_r($lunch);
$lunch=akrem($lunch,'sandwich');
print_r($lunch);
echo '</pre>';
?>
(remove 9's in email)The documentation doesn't say it, but if LENGTH is ZERO, then the result is an empty array [].remember that array_slice returns an array with the current element. you must use array_slice($array, $index+1) if you want to get the next elements.Using the varname function referenced from the array_search page, submitted by dcez at land dot ru. I created a multi-dimensional array splice function. It's usage is like so:
$array['admin'] = array('blah1', 'blah2');
$array['voice'] = array('blah3', 'blah4');
array_cut('blah4', $array);
...Would strip blah4 from the array, no matter where the position of it was in the array ^^ Returning this...
Array ( [admin] => Array ( [0] => blah1 [1] => blah2 ) [voice] => Array ( [0] => blah3 ) )
Here is the code...
<?php
function varname ($var)
{
// varname function by dcez at land dot ru
return (isset($var)) ? array_search($var, $GLOBALS) : false;
}
function array_cut($needle, $haystack)
{
foreach ($haystack as $k => $v)
{
for ($i=0; $i<count($v); $i++)
if ($v[$i] === $needle)
{
return array_splice($GLOBALS[varname($haystack)][$k], $i, 1);
break; break;
}
}
?>
Check out dreamevilconcept's forum for more innovative creations!