在PHP数组上重新排列并得到相等的值


Rearrange and get equivalent value on PHP array

是否有一种方法可以在PHP中获得排列 $input数组内的字符串:

$input = array(3) {
    [0]=>
    string(3) "one"
    [1]=>
    string(3) "two"
    [2]=>
    string(5) "three"
}
然后使用$reference数组作为等效的 的引用。
$reference = array(3) {
    [0]=>
    array(2) {
        [0]=>
        string(1) "2"
        [1]=>
        string(3) "two"
    }
    [1]=>
    array(2) {
        [0]=>
        string(1) "3"
        [1]=>
        string(5) "three"
    }
    [2]=>
        array(2) {
        [0]=>
        string(1) "1"
        [1]=>
        string(3) "one"
    }
}

和结果到$output阵列?

$output = array(3) {
    [0]=>
    string(3) "1"
    [1]=>
    string(3) "2"
    [2]=>
    string(5) "3"
}

您可以使用array_column通过第二列("two", "three"等)重新索引引用数组。

$words = array_column($reference, 0, 1);

然后通过在索引数组中查找$input中每个值对应的键来获得输出。

$output = array_map(function($x) use ($words) {
    return $words[$x];
}, $input);

这对我很有效。

foreach ($reference as $value){
    $new_ref[$value[1]] = $value[0];
}
foreach($input as $in){
    $output[]=$new_ref[$in];
}
var_export($output);
PHP沙箱

我做的第一件事是创建一个新的数组,其中KEY匹配到INPUT,然后我将具有这些KEY的项的值分配给输出数组。

您的用例不是很清楚,但我认为您可以使用array_flip:

$input = ['one','two','three'];
$flipped = array_flip($input);
echo $flipped['one']; //0 - arrays in php are zero based
echo $flipped['three']; //2 - arrays in php are zero based

如果您确实需要如上所述的$reference数组,那么一个简单的循环就可以了:

$reference=[];
foreach($input as $key=>$value)
    $reference[]=[$key+1, $value];