我有一个数组:
$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;
}
谢谢
更新
感谢他们的回复,这使我真正想到了实现结果的最佳方法。我自己的解决方案可能会起作用,但是这还不够,代码也需要很好。我认为重要的是产生好的代码,而不只是好的代码,因此谢谢您的帮助。
答案 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+解决方案,使用implode
,array_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"
答案 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;