downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

extract> <each
Last updated: Fri, 13 Nov 2009

view this page in

end

(PHP 4, PHP 5)

end配列の内部ポインタを最終要素にセットする

説明

mixed end ( array &$array )

end()array の内部ポインタを最後の要素まで進め、その値を返します。

パラメータ

array

配列。この配列は参照渡しとなります。関数内で配列の中身を変更するからです。 つまり、ここには配列そのものを渡さなければならず、 配列を返す関数を指定することはできません。 参照渡しできるのは、実際の変数だけだからです。

返り値

最後の要素の値、あるいは空の配列の場合は FALSE を返します。

例1 end() の例

<?php

$fruits 
= array('リンゴ''バナナ''クランベリー');
echo 
end($fruits); // クランベリー

?>

参考

  • current() - 配列内の現在の要素を返す
  • each() - 配列から現在のキーと値のペアを返して、カーソルを進める
  • prev() - 内部の配列ポインタをひとつ前に戻す
  • reset() - 配列の内部ポインタを先頭の要素にセットする
  • next() - 内部配列ポインタを進める



extract> <each
Last updated: Fri, 13 Nov 2009
 
add a note add a note User Contributed Notes
end
y dot vecchi at gmail dot com
22-Oct-2009 09:35
to see if foreach is in last element of array in PHP5 you can use the end() function...

<?php

$test
= array( 5, 4, 3, 2, 1 );

foreach(
$test as $value)
{

    if (
end($test) == $value)
    {
        echo
"I'm the last";
    }
}

?>
Sam Yong - hellclanner at live dot com
24-Aug-2009 02:05
Take note that end() does not recursively set your multiple dimension arrays' pointer to the end.

Take a look at the following:
<?php

// create the array for testing
$a = array();
$i = 0;
while(
$i++ < 3){
$a[] = array(dechex(crc32(mt_rand())),dechex(crc32('lol'.mt_rand())));
}

// show the array tree
echo '<pre>';var_dump($a);

// set the pointer of $a to the end
end($a);

// get the current element of $a
var_dump(current($a));
// get the current element of the current element of $a
var_dump(current(current($a)));

?>

You will notice that you probably get something like this:

array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(8) "764d8d20"
    [1]=>
    string(8) "85ee186d"
  }
  [1]=>
  array(2) {
    [0]=>
    string(8) "c8c72466"
    [1]=>
    string(8) "a0fdccb2"
  }
  [2]=>
  array(2) {
    [0]=>
    string(8) "3463a31b"
    [1]=>
    string(8) "589f6b63"
  }
}

array(2) {
  [0]=>
  string(8) "3463a31b"
  [1]=>
  string(8) "589f6b63"
}

string(8) "3463a31b"

The array elements' pointer are still at the first one as current. So do take note.
admin at nabito dot net
06-Aug-2008 09:04
This is simple way how to get file extension.

<?php
$filename
= 'somefile.jpg';
echo
end(explode(".", $filename)); // return jpg string

$filename = 'the_another_file.html';
echo
end(explode(".", $filename)); // return html string
?>
Sven Arduwie
15-May-2007 10:43
RE: mika dot stenberg at helsinki dot fi
Your function array_set_current is flawed:
function array_set_current(&$array, $key){
   reset($array);
   while(current($array)){
       if(key($array) == $key){
           break;
       }
       next($array);
   }
}

Notice that current() cannot distinguish the end of an array from a boolean FALSE element value. For example, try this:
    $array = array(false, 'This', 'is', 'a', 'test');
    array_set_current($array, 3);
    var_dump(current($array));

This will work:
    function array_set_current(&$array, $key) {
        reset($array);
        foreach ($array as $value) {
            if (key($array) === $key) {
                break;
            }
        }
    }

Also, I prefer key($array) === $key over key($array) == $key.
egingell at sisna dot com
06-May-2007 08:40
Posted by johnny at west dot net
03-Nov-2006 06:45

>> An easier way to get the last key:
>> $lastkey = end(array_keys($arr));

As stated in a previous note, this may not function as expected (or at all) as end() takes the parameter by reference and you cannot pass a function call by reference.
johnny at west dot net
03-Nov-2006 03:45
An easier way to get the last key:
$lastkey = end(array_keys($arr));
jasper at jtey dot com
11-Jul-2006 09:48
This function returns the value at the end of the array, but you may sometimes be interested in the key at the end of the array, particularly when working with non integer indexed arrays:

<?php
// Returns the key at the end of the array
function endKey($array){
 
end($array);
 return
key($array);
}
?>

Usage example:
<?php
$a
= array("one" => "apple", "two" => "orange", "three" => "pear");
echo
endKey($a); // will output "three"
?>
Flavio Ventura
29-Nov-2005 05:02
In some previous post you can use

current($array)

 instead of

$array[key($array)]

I think it's more self-explaining.
ken at expitrans dot com
27-Oct-2005 06:02
Please note that from version 5.0.4 ==> 5.0.5 that this function now takes an array. This will possibly break some code for instance:

<?php

echo ">> ".end(array_keys(array('x' => 'y')))."\n";

?>

which will return "Fatal error: Only variables can be passed by reference" in version <= 5.0.4 but not in 5.0.5.

If you run into this problem with nested function calls, then an easy workaround is to assign the result from array_keys (or whatever function) to an intermediary variable:

<?php

$x
= array_keys(array('x' => 'y'));
echo
">> ".end($x)."\n";

?>
mika dot stenberg at helsinki dot fi
11-Aug-2005 03:24
Here's something useful with arrays that I did: change an items position up or down in array. Thanks to previous posters for some useful functions (included):

// $mode -1 (negat) moves the item down, +1 (pos) moves the item up
// I used this because i parsed the mode from the query string
// You get the picture though
// $from_id points which item to move

function change_pos($array, $from_id, $mode){

// get hold of the beginning and the end
$start = first($array);
$end = last($array);

reset($array);

// find the position in an array
array_set_current($array, $from_id);

// remember the old value
$temp = $archive[ $from_id ];

// move down

if ($uusi_id < 0){
 
 
    if (key($array) != $end) {

            $array[ $from_id ] = next($array);
            $array[key($aray)] = $temp;
          }
    else echo "Couldnt move it!";
}

// move up
else if ( key($array) != $start ) {

    $array[ $from_id ] = prev($array);
    $array[key($array)] = $temp;
    save($array);
    }
else echo "Couldnt do it !";

}

function array_set_current(&$array, $key){
   reset($array);
   while(current($array)){
       if(key($array) == $key){
           break;
       }
       next($array);
   }
}

function first(&$array) {
if (!is_array($array)) return null;
if (!count($array)) return null;
reset($array);
return key($array);
}

function last(&$array) {
if (!is_array($array)) return null;
if (!count($array)) return null;
end($array);
return key($array);
}
12-May-2005 10:21
Fix for unknown writer of 29-aug-2002.
If you need to get a reference to the first or last element of an array, use these functions:

    function &first(&$array) {
        if (!is_array($array))
            return null;
        if (!count($array))
            return false; // like reset()
        reset($array);
        return $array[key($array)];
    }
       
    function &last(&$array) {
        if (!is_array($array))
            return null;
        if (!count($array))
            return false; // like end()
        end($array);
        return $array[key($array)];
    }

Example (watch out - use as &last() and &first()):

$a = array( 0 => 'less', 10 => 'ten', 20 => ' more');

if ($first = & first($a)) // not false or null
    $first = 'nothing';
if ($last = & last($a)) // not false or null
    $last = 'double';

Now $a is array( 0 => 'nothing', 10 => 'ten', 20 => ' double')
29-Aug-2002 03:34
If you need to get a reference on the first or last element of an array, use these functions because reset() and end() only return you a copy that you cannot dereference directly:

function first(&$array) {
if (!is_array($array)) return &$array;
if (!count($array)) return null;
reset($array);
return &$array[key($array)];
}

function last(&$array) {
if (!is_array($array)) return &$array;
if (!count($array)) return null;
end($array);
return &$array[key($array)];
}
29-Aug-2002 03:17
When adding an element to an array, it may be interesting to know with which key it was added. Just adding an element does not change the current position in the array, so calling key() won't return the correct key value; you must first position at end() of the array:

function array_add(&$array, $value) {
$array[] = $value; // add an element
end($array); // important!
return key($array);
}

extract> <each
Last updated: Fri, 13 Nov 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites