note 68280 added to ref.array

From: Date: Thu, 20 Jul 2006 15:52:45 +0000
Subject: note 68280 added to ref.array
Groups: php.notes 
Request: Send a blank email to php-notes+get-114978@lists.php.net to get a copy of this message
Updated functions for moving element between associative arrays using a numeric index. Sample: $a=array("04"=>"alpha",4=>"bravo","c"=>"charlie","d"=>"delta"); $b=array_move($a,4,2); Move element "bravo" after "delta" keeping keys. Old function probably goes wrong moving "alpha": caused by array_search that match numeric index 4 with "04" (string). Follow: <?php // array functions - 20/07/2006 12.28 if(!defined("ARRAY_FUNCS")) { // Swap 2 elements in array preserving keys. function array_swap(&$array,$key1,$key2) { $v1=$array[$key1]; $v2=$array[$key2]; $out=array(); foreach($array as $i=>$v) { if($i===$key1) { $i=$key2; $v=$v2; } else if($i===$key2) { $i=$key1; $v=$v1; } $out[$i]=$v; } return $out; } // Get a key position in array function array_kpos(&$array,$key) { $x=0; foreach($array as $i=>$v) { if($key===$i) return $x; $x++; } return false; } // Return key by position function array_kbypos(&$array,$pos) { $x=0; foreach($array as $i=>$v) { if($pos==$x++) return $i; } return false; } // Move an element inside an array preserving keys // $relpos should be like -1, +2... function array_move(&$array,$key,$relpos) { if(!$relpos) return false; $from=array_kpos($array,$key); if($from===false) return false; $to=$from+$relpos+($relpos>0?1:0); $len=count($array); if($to>=$len) { $val=$array[$key]; unset($array[$key]); $array[$key]=$val; } else { if($to<0) $to=0; $new=array(); $x=0; foreach($array as $i=>$v) { if($x++==$to) $new[$key]=$array[$key]; if($i!==$key) $new[$i]=$v; } $array=$new; } return $array; } define("ARRAY_FUNCS",true); } ?> ---- Server IP: 213.92.11.19 Probable Submitter: 83.103.24.157 (proxied: unknown) ---- X-Spam-Status: No, hits=3.1 required=5.0 tests=DATE_MISSING,FROM_NO_LOWER autolearn=no version=2.64 ---- Manual Page -- http://www.php.net/manual/en/ref.array.php Edit -- http://master.php.net/note/edit/68280 Del: integrated -- http://master.php.net/note/delete/68280/integrated Del: useless -- http://master.php.net/note/delete/68280/useless Del: bad code -- http://master.php.net/note/delete/68280/bad+code Del: spam -- http://master.php.net/note/delete/68280/spam Del: non-english -- http://master.php.net/note/delete/68280/non-english Del: in docs -- http://master.php.net/note/delete/68280/in+docs Del: other reasons-- http://master.php.net/note/delete/68280 Reject -- http://master.php.net/note/reject/68280 Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#114978) next »