Php 关联数组-更改位置
对于ex,请使用此数组:Php 关联数组-更改位置,php,Php,对于ex,请使用此数组: [food] => Array ( [fruits] => apple [vegetables] => garlic [nuts] => cashew [meat] => beaf ) 我需要更改特定键值组合的位置 比如说,我需要将[水果]=>苹果移动到第三位 [food] => Array ( [vegetables] => garlic [nuts] => cashew
[food] => Array (
[fruits] => apple
[vegetables] => garlic
[nuts] => cashew
[meat] => beaf
)
我需要更改特定键值组合的位置
比如说,我需要将[水果]=>苹果移动到第三位
[food] => Array (
[vegetables] => garlic
[nuts] => cashew
[fruits] => apple
[meat] => beaf
)
我不是说按键或值排序。
我需要将键值的位置更改为一个非常严格的新位置
比如:
change_pos($my_arr, $key_to_move, $new_index);
=>
这可能吗?这很难,但最后:
<?php
function array_splice_assoc(&$input, $offset, $length, $replacement) {
$replacement = (array) $replacement;
$key_indices = array_flip(array_keys($input));
if (isset($input[$offset]) && is_string($offset)) {
$offset = $key_indices[$offset];
}
if (isset($input[$length]) && is_string($length)) {
$length = $key_indices[$length] - $offset;
}
$input = array_slice($input, 0, $offset, TRUE)
+ $replacement
+ array_slice($input, $offset + $length, NULL, TRUE);
}
function array_move($which, $where, $array)
{
$tmpWhich = $which;
$j=0;
$keys = array_keys($array);
for($i=0;$i<count($array);$i++)
{
if($keys[$i]==$tmpWhich)
$tmpWhich = $j;
else
$j++;
}
$tmp = array_splice($array, $tmpWhich, 1);
array_splice_assoc($array, $where, 0, $tmp);
return $array;
}
$array = array('fruits' => 'apple','vegetables' => 'garlic','nuts' => 'cashew','meat' => 'beaf');
$res = array_move('vegetables',2,$array);
var_dump($res);
?>
我要感谢MIIB的辛勤工作!我将接受他的辛勤工作的答复 但我想出了一个更适合我的解决方案,我会使用它
function ksort_arr (&$arr, $index_arr) {
$arr_t=array();
foreach($index_arr as $i=>$v) {
foreach($arr as $k=>$b) {
if ($k==$v) $arr_t[$k]=$b;
}
}
$arr=$arr_t;
}
$arr=array("fruits"=>"apple","vegetables"=>"garlic","nuts"=>"cashew","meat"=>"beaf");
$index_arr=array("vegetables","meat","fruits","nuts");
ksort_arr($arr,$index_arr);
print_r($arr);
结果
Array
(
[vegetables] => garlic
[meat] => beaf
[fruits] => apple
[nuts] => cashew
)
下面是一个使用第二个数组的更简单的解决方案。它还为新的索引参数提供了一些基本的验证。仅用于关联数组。与数字数组一起使用没有意义
function array_move($key, $new_index, $array)
{
if($new_index < 0) return;
if($new_index >= count($array)) return;
if(!array_key_exists($key, $array)) return;
$ret = array();
$ind = 0;
foreach($array as $k => $v)
{
if($new_index == $ind)
{
$ret[$key] = $array[$key];
$ind++;
}
if($k != $key)
{
$ret[$k] = $v;
$ind++;
}
}
// one last check for end indexes
if($new_index == $ind)
$ret[$key] = $array[$key];
return $ret;
}
函数数组移动($key、$new\u index、$array)
{
如果($new_index<0)返回;
if($new_index>=count($array))返回;
如果(!array_key_存在($key,$array))返回;
$ret=array();
$ind=0;
foreach($k=>v的数组)
{
如果($new_index==$ind)
{
$ret[$key]=$array[$key];
$ind++;
}
如果($k!=$key)
{
$ret[$k]=$v;
$ind++;
}
}
//最后一次检查结束索引
如果($new_index==$ind)
$ret[$key]=$array[$key];
返回$ret;
}
这是否适用于非数字索引??你能用这个提供演示例子吗?不能正常工作,不能移动别人的索引elements@MIIB:你发布了我问题的答案,为什么要删除它,请再次发布,它看起来很好…哦,你知道,我的答案的问题是函数用键移动元素,但是我看到你只想移动值,而不是键。谢谢!很抱歉,我没有机会尝试代码。我一试就接受答案。谢谢你的努力!
function array_move($key, $new_index, $array)
{
if($new_index < 0) return;
if($new_index >= count($array)) return;
if(!array_key_exists($key, $array)) return;
$ret = array();
$ind = 0;
foreach($array as $k => $v)
{
if($new_index == $ind)
{
$ret[$key] = $array[$key];
$ind++;
}
if($k != $key)
{
$ret[$k] = $v;
$ind++;
}
}
// one last check for end indexes
if($new_index == $ind)
$ret[$key] = $array[$key];
return $ret;
}