2012-04-16 61 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