2011-12-12 85 views
-1

后,我有这个找到新的密钥的阵列已经被修改

array([0] => 4, [1] => 6, [2] => 8, [3] =>11); 
$value = 6;//(refers to [1]) 

的核心代码后,我的阵列可以改变成为例如:

array([0] => 4, [1] => 8, [2] =>11); 

我想有一个如果$value键已被删除($newvalue=8),或保持不变($newvalue=6),如果6仍然在该数组的值中,则变量($newvalue)被设置为下一个值。

NB如果$value是最后的(11),和11已经被移除,$newvalue应设置为4

总结:

$value = 11; /* array([0] => 4, [1] => 6, [2] => 8);   */ $newvalue = 4; 
$value = 11; /* array([0] => 4, [1] => 6, [2] => 8, [3] => 11); */ $newvalue = 11; 
+0

你已经说过你想要什么样的行为,但是到目前为止你试过什么样的行为来完成它?如果没有,你应该阅读*数据结构和算法*。它会给你解决这样的问题提供一些很好的见解。 – webbiedave

+2

你的大脑伤害?我的脑子很痛苦,想弄清楚你想做什么。 – Bot

+0

我并不完全明白你在问什么,但是你似乎可以从[array_push](http://us3.php.net/manual/en/function.array-push.php),[array_shift ](http://us3.php.net/manual/en/function.array-shift.php)和[array_values](http://php.net/manual/en/function.array-values.php) – rdlowrey

回答

0

假设你的数组值总是在上升订单:

if (in_array($value, $the_array)) { 
    $newvalue = $value; 
} else if ($value > max($the_array)) { 
    $newvalue = $the_array[0]; 
} else { 
    foreach ($the_array as $v) { 
    if ($v > $value) { 
     $newvalue = $v; 
     break; 
    } 
    } 
}