0

私は2つの大きな配列を持っています:

$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連想配列に独自のデータを持っています。

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

@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 に答える
0

いいえ、サーバーから負荷を取り除く他の方法はありません。

この方法でのみこれを行う必要があります。

array_walk でさえ、ルーピーな方法で実行する必要があります。

于 2012-04-16T10:28:02.670 に答える
0

2 つのループを組み合わせる方法はよく考えられていません。それらを一緒にしないでください。

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

これによりcount(a) + count(b)、反復ではなく反復が行われます。acount(a) * count(b)と b に要素が 1 つしかない場合を除き、これは少なくなります。

于 2012-04-16T10:30:11.670 に答える