注意:我应该清楚我的愿望是在一个声明中在功能上做到这一点。我可以使用循环轻松完成此操作,但这不是我感兴趣的内容。
我有两个数组:索引的数字数组A和关联数组B,对象O由数组A的元素索引。
我希望按照A元素的顺序生成一个O数组 - 换句话说,根据关联数组B将索引映射到实际对象。
例如:
A = [ 3, 4, 2, 1 ];
B = [ 1=>"one", 2=>"two", 3=>"three", 4=>"four" ]
我想:
[ "three", "four", "two", "one" ]
另外,顺便说一下,我也很想知道这个概念叫什么。它有点像映射,但具体涉及索引到另一个数组,而不是函数。
答案 0 :(得分:4)
$A = array(3, 4, 2, 1);
$B = array(1=>"one", 2=>"two", 3=>"three", 4=>"four");
foreach($A as $i) $R[] = $B[$i];
var_dump($R);
答案 1 :(得分:1)
我只是添加一点,如果有人仍然对使用“array_map”感兴趣。
<?php
$A = array( 3, 4, 2, 1);
$B = array( 1=>"one", 2=>"two", 3=>"three", 4=>"four" );
print_r($A);echo '<br/>';
print_r($B);echo '<br/>';
function matchAtoB($sourceA, $sourceB)
{
global $B;
return $B[$sourceA];
}
$O = array_map("matchAtoB", $A, $B);
print_r($O);
?>
因此该函数一次只能接收每个数组的元素(而不是整个数组),它将自动循环/重复自身,直到处理完数组中的所有元素。
干杯,
答案 2 :(得分:0)
您不需要循环,您可以立即访问元素:
$three = $b[$a[0]]; // "three"
$four = $b[$a[1]]; // "four"
$two = $b[$a[2]]; // "two"
$one = $b[$a[3]]; // "one"
您可以将此视为实现相同目标的“懒惰”或“及时”方式,但无需为哈希映射编制索引。
如果你想明确地使用数组,没有额外的查找,你将需要一个循环。
我不确定这是否有名称,但'数据存储区'或'哈希图'与有序键组合的组合并不常见。
答案 3 :(得分:0)
$order = array(3, 4, 2, 1);
$input = array(1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four');
使用array_map()(PHP 5.3&gt;)
$output = array_map(function($v) use($input) {
return $input[$v];
}, $order);
但是,这与执行以下操作基本相同:
$output = array();
foreach ($order as $o) {
$output[] = $input[$o];
}
我不能诚实地看到这样做的简短方法。
答案 4 :(得分:0)
NullUserException在评论中发布了答案: