我有一个如下所示的数组:
[0] => Array
(
[1] => 5
[2] => 4
[3] => 3
[5] => 1
[7] => 1
[8] => 2
[9] => 3
[10] => 4
[11] => 5
)
[1] => Array
(
[1] => 6
[2] => 5
[4] => 3
[5] => 2
[6] => 1
[8] => 3
[9] => 4
[10] => 5
[11] => 6
)
[2] => Array
(
[1] => 7
[2] => 6
[3] => 5
[4] => 4
[5] => 3
[6] => 2
[7] => 3
[8] => 4
[11] => 7
)
我有一个操作订单,我试图通过,我真的不知道从哪里开始。任何建议都会有很大的帮助。
首先,我向我的班级提供我想要归还的物品数量。例如,我们将使用4。
我想循环查找数组中具有最低值的项目。
我想查看周围物品的钥匙(包括在内),并确保他们不会错过任何一个号码,如果它们是......请注意它。
在这个例子中,你要来的第一个是:
[5] => 1
现在环顾四周,你会发现钥匙上缺少一些数字。因此,没有4的组合可以按正确的顺序匹配任何4。
[1] => 5
[2] => 4
[3] => 3
[5] => 1 //this one
[7] => 1
[8] => 2
[9] => 3
在这种情况下,我希望它转移到下一个案例。
[7] => 1
请注意,由于密钥为7,8,9,10。
,因此可以使用 [7] => 1
[8] => 2
[9] => 3
[10] => 4
这是我想先归还的地方......但我甚至不知道如何到达那里。
还有更多像这样的情况......例如,在数据集中根本没有1 ...而在最后一个中只有这两个。
[0] => Array
(
[1] => 5
[2] => 4
[3] => 3
[5] => 3
[7] => 3
[8] => 3
[9] => 3
[10] => 4
[11] => 5
)
[1] => Array
(
[1] => 6
[2] => 5
[4] => 3
[5] => 3
[6] => 3
[8] => 3
[9] => 4
[10] => 5
[11] => 6
)
[2] => Array
(
[1] => 7
[2] => 6
[5] => 3
[6] => 2 // this one
[7] => 3
[8] => 4
[11] => 7
)
以下不会起作用:
[6] => 2 // this one
[7] => 3
[8] => 4
[11] => 7
但是这个会:
[5] => 3
[6] => 2 // this one
[7] => 3
[8] => 4
我不知道如何处理这个问题。如果有人可以提供一些建议,那将非常感激。非常感谢提前。
答案 0 :(得分:1)
以下假设您的数据位于名为$data
的数组中。我将逐步描述它,然后将它们作为一个函数组合在一起。
第1步找到最小值:
$minValue=min($data);
第2步循环遍历数组,查找该值的所有值:
foreach($data as $index => $value){
if($value == $minValue){
// $index is a candidate!
}
}
第3步检查索引后是否存在$valuesToReturn
条目:
$success=true;
for($i=1;$i<=$valuesToReturn;$i++){
if(!array_key_exists($index + $i,$data)){
// Candidate failed.
$success=false;
break;
}
}
第4步如果候选人成功,请将其退回。
if($success){
return $index;
}
总而言之,我们得到了这个:
function findSuitableIndex($data,$valuesToReturn){
// Min:
$minValue=min($data);
foreach($data as $index => $value){
if($value == $minValue){
// $index is a candidate!
// test if index is actually suitable:
$success=true;
for($i=1;$i<=$valuesToReturn;$i++){
if(!array_key_exists($index + $i,$data)){
// Candidate failed.
$success=false;
break;
}
}
if($success){
return $index;
}
}
}
// If we fell down here, we failed to find any successful results.
return -1;
}
工作样本:
答案 1 :(得分:0)
以下是一些建议。您的具体实施将取决于您的具体情况。
要循环遍历数组中的每个元素,可以使用foreach
循环。
foreach ($arr[0] as $index => $value) {
// Here, $arr[0][$index] == $value;
}
要检查密钥是否存在,您可以使用array_key_exists
。
if ( !array_key_exists($index - 1, $arr[0]) ) {
// The previous index is missing in the array.
}
在第一个索引处找到具有最小值的k
索引的连续序列的简单(但效率低)方法是找到最小元素并检查连续序列是否存在;如果没有,找到下一个最小元素并递归检查,直到你完成处理最大元素。
您还可以尝试查找至少长度为k
的所有连续序列,然后在第一个索引处选择值最小的序列。
希望这有帮助!