I wrote a simple function to perform an intersect on multiple (unlimited) arrays.
Pass an array containing all the arrays you want to compare, along with what key to match by.
<?php
function multipleArrayIntersect($arrayOfArrays, $matchKey)
{
$compareArray = array_pop($arrayOfArrays);
foreach($compareArray AS $key => $valueArray){
foreach($arrayOfArrays AS $subArray => $contents){
if (!in_array($compareArray[$key][$matchKey], $contents)){
unset($compareArray[$key]);
}
}
}
return $compareArray;
}
?>
array_pop
(PHP 4, PHP 5)
array_pop — Pop the element off the end of array
Description
array_pop() pops and returns the last value of the array , shortening the array by one element. If array is empty (or is not an array), NULL will be returned. Will additionally produce a Warning when called on a non-array.
Note: This function will reset() the array pointer after use.
Parameters
- array
-
The array to get the value from.
Return Values
Returns the last value of array . If array is empty (or is not an array), NULL will be returned.
Examples
Example #1 array_pop() example
<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
print_r($stack);
?>
After this, $stack will have only 3 elements:
Array ( [0] => orange [1] => banana [2] => apple )
and raspberry will be assigned to $fruit.
See Also
See also array_push(), array_shift(), and array_unshift().
array_pop
23-Oct-2008 09:13
26-May-2008 07:37
@Orsi
correct me if I'm wrong... but an easier version might be
<?php
/*
* This function deletes the given element from a one-dimension array
* Parameters: $array: the array (in/out)
* $deleteIt: the value which we would like to delete
* $useOldKeys: if it is false then the function will re-index the array (from 0, 1, ...)
* if it is true: the function will keep the old keys
* Returns true, if this value was in the array, otherwise false (in this case the array is same as before)
*/
function deleteFromArray(&$array, $deleteIt, $useOldKeys = FALSE)
{
$key = array_search($deleteIt,$array,TRUE);
if($key === FALSE)
return FALSE;
unset($array[$key]);
if(!$useOldKeys)
$array = array_values($array);
return TRUE;
}
?>
--untested but should work.. rite?--
05-Feb-2008 10:15
@smp_info
I think you are still tired. What would be wrong with:
<?php
$array = array('one', 'two', 'three', 'four');
//pop the last element off
array_pop($array);
//$array == array('one', 'two', 'three');
?>
As the documentation clearly notes, array_pop() not only returns the last element, but actually removes it from the array wich is passed by reference. Calling array_diff is a waste of resources.
10-Jan-2008 04:05
Hi,
Here is a simple function which delete one element from the array (with value):
<?php
/*
* This function deletes the given element from a one-dimension array
* Parameters: $array: the array (in/out)
* $deleteIt: the value which we would like to delete
* $useOldKeys: if it is false then the function will re-index the array (from 0, 1, ...)
* if it is true: the function will keep the old keys
* Returns true, if this value was in the array, otherwise false (in this case the array is same as before)
*/
function deleteFromArray(&$array, $deleteIt, $useOldKeys = FALSE)
{
$tmpArray = array();
$found = FALSE;
foreach($array as $key => $value)
{
if($value !== $deleteIt)
{
if(FALSE === $useOldKeys)
{
$tmpArray[] = $value;
}
else
{
$tmpArray[$key] = $value;
}
}
else
{
$found = TRUE;
}
}
$array = $tmpArray;
return $found;
}
?>
Maybe it will help somebody...
26-Nov-2007 12:44
I'm sorry, I must have been extremely tired when writing the note below. :P
Replace $element with $array, and the code will work nicely.
The right code would be..
<?php
//$array = array('one', 'two', 'three', 'four');
//pop the last element off and return the array
$array = array_diff($array, array(array_pop($array)));
20-Nov-2007 01:23
I've found myself several times wanting the array (minus the popped element) returned, instead of the element returned.
The following code does this nicely:
<?php
//$array = array('one', 'two', 'three', 'four');
//pop the last element off and return the array
$array = array_diff($array, array(array_pop($element)));
31-Oct-2007 01:37
I had a problem when using this function because my array was made up entirley of numbers, so I have made my own function. Hopefully it will be useful to somebody.
function array_trim_end($array){
$num=count($array);
$num=$num-1;
unset($array[$num]);
return $array;
}
07-Jun-2005 11:03
In a previous example ...
<?php
function array_trim ( $array, $index ) {
if ( is_array ( $array ) ) {
unset ( $array[$index] );
array_unshift ( $array, array_shift ( $array ) );
return $array;
}
else {
return false;
}
}
?>
This have a problem. if u unset the last value and then use
<?
array_unshift ( $array, array_shift ( $array ) );
?>
will return a : Array ( [0] => )
so u can fix it using...
<?php
if (count($array) > 0) array_unshift ( $values, array_shift ( $values ) );
?>
good luck ;)
strrchr is a lot more useful than the other example using array_pop for finding the extension of a file. For example:
<?php
$ext = strrchr($filename, ".");
?>
$ext will contain the extension of the file, including a ".", if the file has an extension, and FALSE if the file has no extension. If the file has multiple extensions, such as "filename.tar.gz", then this construction will just return the last extension.
25-Nov-2004 05:35
Quick way to get the extension from a file name using array_pop:
$ext = array_pop(explode(".",$filename));
A function to delete an array value that recalculates the index ( its very short and easy to understand ).
Hope this might help someone...
<?php
/* Usage:
$array : Array
$indey : Integer
The value of $array at the index $index will be
deleted by the function.
*/
function array_trim ( $array, $index ) {
if ( is_array ( $array ) ) {
unset ( $array[$index] );
array_unshift ( $array, array_shift ( $array ) );
return $array;
}
else {
return false;
}
}
?>
15-Dec-2003 12:36
array_pop() can be usefull for fetching extentions of files, especially in cases where there might be more than one period in the filename.
eg:
<?php
$filename = "textfile.txt.bak";
$tmp = explode(".", $filename);
$ext = array_pop($tmp);
print_r($ext); // Shows "bak"
?>
Be aware that using array_pop on an associative array that uses a numeric string as a key changes the key:
<?php
$stack= array("12" => "green", "54" => "brown", "672" => "blue");
print_r($stack);
$fruit = array_pop($stack);
print_r($stack);
?>
Results of execution:
Array
(
[12] => green
[54] => brown
[672] => blue
)
Array
(
[0] => green
[1] => brown
)
However, if there is a non-numeric character in the key, the key will be maintained:
<?php
$stack= array("g1" => "green", "b1" => "brown", "b2" => "blue");
print_r($stack);
$fruit = array_pop($stack);
print_r($stack);
?>
Results of execution:
Array
(
[g1] => green
[b1] => brown
[b2] => blue
)
Array
(
[g1] => green
[b1] => brown
)
08-Jun-2003 03:10
A function that may help some out, considering it's pretty much the one mentioned previously...
<?php
function array_trim($arr, $indice) {
if(!isset($indice)) {
$indice = count($arr)-1;
}
unset($arr[$indice]);
array_shift($arr);
return $arr;
}
?>
It cuts the given index value off of the array, but without the shift, if the 'index' value isn't given, it cuts off the end value.
01-Mar-2003 02:16
alex.chacon@terra.com
Hi
Here there is a function that delete a elemente from a array and re calculate indexes
<?php
function eliminarElementoArreglo ($array, $indice)
{
if (array_key_exists($indice, $array))
{
$temp = $array[0];
$array[0] = $array[$indice];
$array[$indice] = $temp;
array_shift($array);
//reacomodamos índices
for ($i = 0 ; $i < $indice ; $i++)
{
$dummy = $array[$i];
$array[$i] = $temp;
$temp = $dummy;
}
}
return $array;
}
?>
