0

我有两个大数组:

$a = array('a1','a2','a3','a4'); // and so on
$b = array('b1'=>'a1', 'b2'=>'a3', 'b3'=>'a1'); // 

我想得到以下结果:

$a = array('a1'=>array('b1', 'b3'), 'a2'=>array(), 'a3'=>array('b2') );

我可以这样做:

foreach($a as $aa){
    foreach($b as $bb){
        // check with if then add to a
    }
}

但随着数字的增加,它会变得非常大。

所以我想到如果我在添加到$a下一个循环后删除每个“b”元素会更小,我会削减资源。

但是在拼接循环数组时,索引似乎没有更新,并且下一个循环没有考虑到它被减1的事实。

我怎样才能使这项工作,还有,是否有更好的方法将数组的项目拟合到另一个数组的适当索引中?

编辑:

如果两者的结构$a都是$b

$a[0]['Word']['id']=1;
$a[0]['Word']['sentence_id']=2;
$a[0]['Word']['word_string']='someWord';

$b[0]['Word']['id']=3;
$b[0]['Word']['sentence_id']=4;
$b[0]['Word']['word_string']='someWord';

// And i would like to list `b` like so:
$a[0]['list_of_bs']=array(b[0], b[1]);
//So that i can get:
echo $a[0]['list_of_bs']['Word']['id'];
// and to get result 3

我希望它是$a[0][Word][list_of_b]=array(b1,b2,b3)并且每个b's 在关联数组中都有自己的数据。

4

4 回答 4

3

试试这个,

$a = array('a1','a2','a3','a4');
$b = array('b1'=>'a1', 'b2'=>'a3', 'b3'=>'a1');

foreach($a as $values)
{
    $key = array_keys($b, $values);

    $new_array[$values] = $key;
}

$new_array -> 将是您需要的结果。

于 2012-04-16T10:38:52.280 回答
0

不,没有其他方法可以减轻服务器的负载。

您只需要以这种方式执行此操作。

甚至 array_walk 也需要像循环方式一样执行它。

于 2012-04-16T10:28:02.670 回答
0

您将两个循环放在一起的方式没有经过深思熟虑。不要把它们放在一起,而是一个接一个地:

foreach ($a as $aa) {
    // transform a
}
foreach ($b as $bb){
    // check with if then add to a
}

这将进行count(a) + count(b)迭代而不是count(a) * count(b)迭代 - 除非 a 和 b 只有一个元素,否则迭代会更少。

于 2012-04-16T10:30:11.670 回答
0

从@hakre 汲取灵感..

为什么不循环通过 $b

new_arr = new array
foreach $b as $bb
  new_arry($bb->val).push($bb->key)

foreach $new_arry as $nn
  if $nn doesn't exist in $a then remove
于 2012-04-16T10:35:52.777 回答