根据数组订购数据

时间:2020-10-09 18:36:39

标签: php sorting

我有一个数组:

$order = array(2,0,1)

我还有三个文本变量

$a, $b, $c

它们每个都由数字表示,$ a为0,$ b为1,$ c为2

我想按数组设置的顺序将变量添加到文本变量($ holder)中

所以如果数组是(2,0,1),那么

$holder = $c.$a.$b

当$ order更改时,我希望$ holder中的订单更改为匹配。

我可以完成这项工作,但这样做似乎很垃圾,所以我想知道是否有人有更好的方法:

$holder ="";
$order = array(2,0,1)

for($x=0;$x<count($holder);$x++){

switch ($order)

case 0:
$holder .= $a;
break;

case 1:
$holder .=$b;
break;

case 2:
$holder .=$c;
break;

}

谢谢

更新

感谢他们的回复,这使我真正想到了实现结果的最佳方法。我自己的解决方案可能会起作用,但是这还不够,代码也需要很好。我认为重要的是产生好的代码,而不只是好的代码,因此谢谢您的帮助。

4 个答案:

答案 0 :(得分:2)

普通数组包含从0开始的键。您可以使用该概念,并根据其表示将文本变量分配给数组。

就像$ a代表0,因此将其值放入数组的索引0,依此类推。

现在,您可以通过访问数组索引轻松访问这些值。

$a = 'X';
$b = 'Y';
$c = 'Z';

$arr = [$a, $b, $c]; 

$order = [2,0,1];

$text = '';
foreach($order as $key){
    $text .= $arr[$key];
}

echo $text;
Output:
ZXY

答案 1 :(得分:2)

可能不是最快的方法,但是使用了某些array_函数。这会反转顺序以使顺序值成为键,然后使用array_replace()从参数数组中的相应点获取值。然后只需implode()的结果...

$order = array(2,0,1);
$a="1";
$b="2";
$c="3";

echo implode(array_replace(array_flip($order), [ $a, $b, $c ]));

给予

312

答案 2 :(得分:2)

一个简短的PHP 7.4+解决方案,使用implodearray_map和箭头功能:

$a = 'a';
$b = 'b';
$c = 'c';

$values = [$a, $b, $c];
$order = [2, 0, 1];

$holder = implode(array_map(fn($index) => $values[$index] ?? null, $order));  // "cab"

Demo

答案 3 :(得分:0)

另一个版本,希望符合您的想法。

$order = array(1,0,2);
$var = array(
    0 => "a",
    1 => "b",
    2 => "c"
);
$holder = '';
foreach( $order as $item ){
    $holder .= $var[$item];
}
echo $holder;