PHP (array_keys) 函数不是 return 除了 for 循环中的一些键之外的所有索引
PHP (array_keys) function not return all indexes except some keys in for loop
我正在尝试从未排序的数组中获取索引(键),但我做错了。
这是我的两个数组:
$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>';
输出
Array ( [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 )
我期待的是
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 )
您没有保存输出:
$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);
使用 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);
循环$sorted
,在$unsorted
中找到key/value对并存储。并将$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
)
您可以在维护索引关联的同时简单地对数组进行排序,然后获取结果数组的键:
$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);
因为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);
我正在尝试从未排序的数组中获取索引(键),但我做错了。 这是我的两个数组:
$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>';
输出
Array ( [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 )
我期待的是
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 )
您没有保存输出: $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);
使用 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);
循环$sorted
,在$unsorted
中找到key/value对并存储。并将$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
)
您可以在维护索引关联的同时简单地对数组进行排序,然后获取结果数组的键:
$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);
因为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);