2012-04-16 64 views
0

后更新我有两个大的数组:的foreach计数没有得到array_splice

$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 
    } 
} 

但它会变得非常大,数量更大。

因此,我想到如果删除每个'b'元素后被添加到$a下一个循环会更小,我会切断资源。

但是拼接环形阵列时,该指数似乎并没有得到更新,而实际上,它是由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的的有它自己的数据在关联数组中。

+0

是什么'$了'和'$ B' – Baba 2012-04-16 10:25:05

+0

的关系之间的关系是每个'$ B'元素具有适当的'$了'元素的索引,需要被添加到它。 – mgPePe 2012-04-16 10:34:35

+0

好的...我现在明白了..认为我有一个自解决方案 – Baba 2012-04-16 10:47:41

回答

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 - >将是你所需要的结果。

+0

这正是我问我的问题,所以我把它标为正确的。然而,你可以看看编辑,并告诉我这将如何工作如果$ a'和'$ b'具有以下结构,如我的编辑中所述?我会超级感谢 – mgPePe 2012-04-16 10:48:26

+0

这就是我给的!我不明白你在问什么。请说清楚。 – 2012-04-16 10:52:47

+0

如,我将如何保留整个对象,如果它不只是一个简单的字符串'L1',而是一个完整的关联数组。 – mgPePe 2012-04-16 10:54:42

0

没有没有其他办法从服务器中删除负载。

你只需要这样做。

即使array_walk还需要像糊涂的方式来执行它。

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都只有一个元素。

+0

关于'count(a)+ count(b)'迭代的说法是对的,但是我不明白它是如何帮助我将每个单独的'$ b'元素映射到相应的'$ a'元素的。 – mgPePe 2012-04-16 10:36:50

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 
+0

你可以计算出php的语法:) – 2012-04-16 10:36:40

+0

所有'$ b'元素都与一个'$ a'元素相关。问题不在于删除它们,而是将其映射到相应的'$ a'。 – mgPePe 2012-04-16 10:40:08