好的,我有一大堆带有一大堆徽章的阵列。我有3个来自数据库的变量。我需要知道如何计算$ current变量在$ start和$ end变量中的位置,然后输出为%的int。
示例:
for (int i = 0; i < 10; i++) {
CustomUIView *setView = [[[NSBundle mainBundle] loadNibNamed:@"CustomUIView" owner:nil options:nil] objectAtIndex:0];
setView.frame = CGRectMake(10, 10 + (10*i) + (i*100), self.view.frame.size.width - 20, 100);
[self.scrollView addSubview:setView];
}
self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, 10 + (10*10) + (10*100));
我唯一的想法是,我可能会以某种方式计算$ start和$ end之间有多少变量,并以某种方式减去$ current的位置?
感谢您的输入
我尝试了你的代码,但我觉得我搞砸了某个地方:
$data = array(
['a','b','c'],
['d','e']
);
$start = 'b';
$current = 'c';
$end = 'e';
*Some maths equation to return position value?*
);
// Progress Bar configurations
$data = array(
array('diamond_V','diamond_IV','diamond_III','diamond_II','diamond_I'),
array('platinum_V','platinum_IV','platinum_III','platinum_II','platinum_I'),
array('gold_V','gold_IV','gold_III','gold_II','gold_I'),
array('silver_V','silver_IV','silver_III','silver_II','silver_I'),
array('bronze_V','bronze_IV','bronze_III','bronze_II','bronze_I')
答案 0 :(得分:1)
您可以执行以下操作:
首先得到每个项目的位置:
然后,一旦你的3个变量是数字,就可以做一些数学了。
($current - $start) / ($end - $start )
即使您使用的是负数(只要$ end&gt; $ current&gt; $ start),也会给您百分比。
答案 1 :(得分:1)
尝试以下步骤
array('a,b,c,d,e')
$data
中的内部数组破坏,使其变为array(['a,b,c'],['d,e'])
然后内爆这个数组,它会给你一个array('a,b,c,d,e')
$key = array_search($value, $array);
,你可以得到你的值“b”,“c”,“e”=“2”,“3”,“5”的索引(说这些数字是保存在变量$start
,$current
和$end
中(($current-$start)/($end-$start))*100
使用以下代码段来破坏$ data
$data = array(
array("a","b","c"),
array("d","e","f")
);
foreach($data as $key => &$value){
$value = implode(",", $value);
}
$dataimplode = explode(",",(implode(",", $data)));
print_r($dataimplode);
答案 2 :(得分:0)
我不太了解你的数据结构,但是通用的解决方案是嵌套循环
$i = 0;
$startPos = -1;
$endPost = -1;
$currentPos = -1;
foreach ($data as $row) {
foreach ($row as $item) {
if ($item == $start) $startPos = $i;
if ($item == $current) $currentPos = $i;
if ($item == $end) $endPos = $i;
$i++;
}
}
使用此代码可以为您提供数组中每个项目的唯一索引。距离的计算不仅仅是一些减法。
答案 3 :(得分:0)
以下函数将返回包含(i,j)
的数组,这意味着可以在$needle
上找到值$haystack[i][j]
。此函数仅支持最多2个数组的级联,例如:array(array())。
function recursive_array_search($needle,$haystack) {
foreach($haystack as $key=>$value) {
$some=array_search($needle,$value);
if(is_array($value) && $some !== false){
return array($key, $some);
}
}
return false;
}
以下内容将为您提供(i, j)
和$data
数组的总索引。此函数仅支持最多2个数组的级联,例如:array(array())。
function gettotalindex($index, $array)
{
$j = 0;
for($i=0; $i<$index[0]; $i++)
{
$j += count($array[$i]);
}
$j += $index[1];
return $j;
}
您可以这样使用这两种功能:
$start = gettotalindex(recursive_array_search('b', $data), $data);
我已经加入了他们,所以你可以使用recursive_total_index('b', $data)
并获得总索引并使其完全递归,支持无限数量的级联:
function recursive_total_index($needle, $haystack) {
$index = 0;
if(!is_array($haystack)) return false;
foreach($haystack as $key=>$value) {
$index += ($key>0 ? count($haystack[$key-1]) : 0);
$some = recursive_total_index($needle,$value);
if(is_array($value) && $some !== false){
return $index+$some;
}
else if(!is_array($value) && $needle===$value)
{
return $key;
}
}
return false;
}
使用示例:
$data = array( ['a','b'], ['c','d'], array(['e','f'],['g','h'], array(['i','j'])));
echo recursive_total_index('i', $data);
*Outputs 8*
然后只需减去并做你想做的事。