1

タイトルがややこしいかもしれませんがご容赦ください。しかし、ここに私の問題があります。クラスと呼ばれる次の配列があります。

Array
(
    [0] => Array
        (
            [Name] => BE1A
            [Department] => Emmen
        )
     etc.

Departments という配列があります。

Array
(
    [0] => Array
        (
            [Name] => 3 Receptie Emmen
            [code] => Emmen
        )
    etc.

これらの配列はデータベースにインポートされます。しかし、最初に、配列クラスの値の部門を、classes.department==departments.code の行のインデックスに置き換える必要があります。このようにして、外部キーを使用してクラスを部門にリンクできます。したがって、配列クラスは次のようになります。

 Array
    (
        [0] => Array
            (
                [Name] => BE1A
                [Department] => 0
            )
         etc.

何か案は?

4

3 に答える 3

1

これには遅れていますが、配列反復子を使用できます。

$classes = array(
  array('name' => 'Class1', 'department' => 'xyz'),
  array('name' => 'Class2', 'department' => 'foo'),
  array('name' => 'Class3', 'department' => 'bar'),
);

$departments = array(
  array('name' => 'Department1 name', 'code' => 'xyz'),
  array('name' => 'Department2 name', 'code' => 'foo'),
  array('name' => 'Department3 name', 'code' => 'bar'),  
);


$test = new ArrayIterator($classes);
while ($test->valid()) {
  $class = $test->current();
  foreach($departments as $department) {
    if ($class['department'] == $department['code']) {
      $key = $test->key();
      $classes[$key]['department'] = $key;
    }
  }
  $test->next();
}

print_r($classes);
于 2013-06-28T14:32:56.280 に答える
1

これは最も効率的なコードではないかもしれませんが、必要なことは実行できます。一致するエントリが複数ある場合$departmentsは、最初のエントリのインデックスが取得されます。一致するものが見つからない場合は、 value が割り当てられますNULL

$classes = array(
    array('Name' => 'BE1A', 'Department' => 'Emmen'),
    array('Name' => 'Something', 'Department' => 'Another'),
    array('Name' => 'Yet more', 'Department' => 'More'),
    array('Name' => 'Yet more again', 'Department' => 'Nothing')
);

$departments = array(
    array('Name' => '3 Receptie Emmen', 'code' => 'Emmen'),
    array('Name' => 'Something else', 'code' => 'Another'),
    array('Name' => 'More stuff', 'code' => 'More')
);


for($i=0; $i<count($classes); $i++) {
    $arr = array_filter($departments, function($dpt) use($classes, $i) {
        return ($dpt['code'] == $classes[$i]['Department']);
    });
    if(count($arr) > 0) {
        reset($arr);
        $classes[$i]['Department'] = key($arr);
    }
    else {
        $classes[$i]['Department'] = NULL;
    }
}

print_r($classes);

これは出力されます:

Array
(
    [0] => Array
        (
            [Name] => BE1A
            [Department] => 0
        )

    [1] => Array
        (
            [Name] => Something
            [Department] => 1
        )

    [2] => Array
        (
            [Name] => Yet more
            [Department] => 2
        )

    [3] => Array
        (
            [Name] => Yet more again
            [Department] => -1
        )

)

のクロージャーを使用することに注意してくださいarray_filter。したがって、これを機能させるには、少なくとも php 5.3 が必要です。そうでない場合は、を削除して比較関数内にuse($classes, $i)追加できます。global $classes, $i;

于 2013-06-28T14:06:18.737 に答える
0

配列はインデックス値を介してアクセスされ、配列の1つを反復処理する必要があり、そのインデックスを使用して他の配列から値を取得できます

classes[$key]['department']==departments[$key]['code']
于 2013-06-28T13:55:20.100 に答える