我有两个大型数组:
$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 :(得分: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 - >将是你需要的结果。
答案 1 :(得分:0)
没有其他方法可以从服务器上删除负载。
您只需要这样做。
即使是array_walk也需要像循环一样执行它。
答案 2 :(得分: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只有一个元素,否则这个迭代会更少。
答案 3 :(得分: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