我正在尝试从未排序的数组中获取索引(键),但是我做错了。 这是我的两个数组:
$unsorted = [1,2,1,14,3,1,3,6,1,13,83,4, 4 ,68];
$sorted = [83,68,14,13,6,4,4,3,3,2,1,1,1,1];
我尝试了array_keys()
。下面的代码有效
$a = array_keys($unsorted,$sorted[0]);
print_r($a);
echo '<br>';
输出
数组([0] => 10)
但是在for循环中却不是。请建议我哪里做错了
for($y=0;$y<sizeOf($sorted);$y++) {
$final_keys = array_keys($unsorted,$sorted[$y]);
//$final[] = $final_two[$y];
}
print_r($final_keys);
输出为
Array([0] => 0 [1] => 2 [2] => 5 [3] => 8)
我期望的是
数组([0] => 10 [1] => 13 [2] => 3 [3] => 9 [4] => 7 [5] => 11 [6] => 12 [7] => 4 [8] => 6 [9] => 1 [10] => 0 [11] => 2 [12] => 5 [13] => 8)
答案 0 :(得分:2)
循环$sorted
,在$unsorted
中找到键/值对并进行存储。并将$unsorted
(我制作了一个副本,而不是破坏原始文档)中的值设置为false,否则1
将始终找到1
的第一个值。
$unsorted = [1,2,1,14,3,1,3,6,1,13,83,4, 4 ,68];
$sorted = [83,68,14,13,6,4,4,3,3,2,1,1,1,1];
$copy = $unsorted;
$output=[];
foreach ($sorted as $key => $value){
$reference = array_search( $value , $copy );
$output[$key] = $reference;
$copy[$reference] = false;
}
结果:
Array
(
[0] => 10
[1] => 13
[2] => 3
[3] => 9
[4] => 7
[5] => 11
[6] => 12
[7] => 4
[8] => 6
[9] => 1
[10] => 0
[11] => 2
[12] => 5
[13] => 8
)
答案 1 :(得分:2)
您可以在保持索引关联的同时对数组进行排序,然后获取结果数组的键:
$unsorted = [1,2,1,14,3,1,3,6,1,13,83,4, 4 ,68];
$temp = $unsorted; // create a copy, in case you need still need the unsorted version later on
arsort($temp); // sort values in reverse order, while keeping the keys
$keys = array_keys($temp);
var_dump($keys);
答案 2 :(得分:0)
您没有保存输出: $ final_keys是要重新填充的常规变量。或在其情况下重新填充数组
$final_keys = array() ;
for($y=0;$y<sizeOf($sorted);$y++) {
$final_keys[] = array_keys($unsorted,$sorted[$y]);
//$final[] = $final_two[$y];
}
print_r($final_keys);
您还可以将每个数组添加到正确的键$final_keys
:
$final_keys = array() ;
for($y=0;$y<sizeOf($sorted);$y++) {
$final_keys[$y] = array_keys($unsorted,$sorted[$y]);
//$final[] = $final_two[$y];
}
print_r($final_keys);
答案 3 :(得分:0)
尝试使用array_search()这个简单的解决方案
$unsorted = [1,2,1,14,3,1,3,6,1,13,83,4, 4 ,68];
$sorted = [83,68,14,13,6,4,4,3,3,2,1,1,1,1];
foreach($sorted as $value) {
$final_keys[] = $tempKey = array_search($value,$unsorted);
unset($unsorted[$tempKey]);
}
print_r($final_keys);
答案 4 :(得分:0)
因为array_search是一个缓慢的操作,使用结果具有二次复杂度。相反,您可以通过两次遍历数组来使用线性复杂度。
$unsorted = [1,2,1,14,3,1,3,6,1,13,83,4, 4 ,68];
$sorted = [83,68,14,13,6,4,4,3,3,2,1,1,1,1];
$temp = [];
foreach($unsorted as $k=>$v) {
$temp[$v][] = $k;
}
$res = [];
foreach($sorted as $v) {
$res[] = array_shift($temp[$v]);
}
print_r($res);