3

次のような別の配列から配列を作成したいとします。

 $array = array('bla' => $array2['bla'],
                'bla2' => $array2['bla2'],
                'foo' => $array2['foo'],
                'Alternative Bar' => $array['bar'],
                'bar' => $array2['bar']);

$ array2に、追加するインデックスごとにifを使用せずに、他の配列に渡すインデックスがあるかどうかをテストするための最良の方法は何ですか。

$arrayのキーは$array2とは異なる場合があることに注意してください

4

5 に答える 5

2

私がしたことは、必要なキーを使用して配列のテンプレートを作成することでした。

$template = array('key1', 'key2', 'key3');

次に、テンプレートを他の配列とマージします。2番目の配列にキーがない場合、キーの値はnullになります。これにより、オフセット値に関する警告の問題が発生しなくなります。

$template = array('key1', 'key2', 'key3');
$array = array_merge($template, $otherarray);
于 2009-10-27T10:53:39.150 に答える
1

私が正しく理解していれば...

$a = array('foo' => 1, 'bar' => 2, 'baz' => 3);
$keys = array('foo', 'baz', 'quux');

$result = array_intersect_key($a, array_flip($keys));

これにより、$aから既存のキーのみが選択されます

于 2009-10-23T09:10:03.547 に答える
1

可能性は次のとおりです。

   $array = array(
        'bla'  => (isset($array2['bla']) ? $array2['bla'] : ''),
        'bla2' => (isset($array2['bla2']) ? $array2['bla2'] : ''),
        'foo'  => (isset($array2['foo']) ? $array2['foo'] : ''),
        'xxx'  => (isset($array2['yyy']) ? $array2['yyy'] : ''),
        'bar'  => (isset($array2['bar']) ? $array2['bar'] : '')
     );

この問題がより動的に発生する場合は、soulmergeが投稿したようにarray_intersect_keyを使用することをお勧めします。ただし、そのアプローチには、同じキーを持つアレイのみを使用できるというトレードオフがあります。

2つの配列のキーは異なる可能性があるため、マッピング配列を使用して配列間でキーをマッピングすることで、半動的なものを構築できます。少なくとも、配列内で異なるキーをリストする必要があります。

//key = key in $a, value = key in $b
$map = array( 
    'fooBar' => 'bar'    
); 

$a = array(
    'fooBar' => 0,
    'bla' => 0,
    'xyz' => 0
); 

$b = array(
    'bla' => 123,
    'bar' => 321,
    'xyz' => 'somevalue'  
);

foreach($a as $k => $v) {
    if(isset($map[$k]) && isset($b[$map[$k]])) {
        $a[$k] = $b[$map[$k]];
    } elseif(isset($b[$k])){
        $a[$k] = $b[$k];
    }
}

そうすれば、$mapで異なるキーを定義するだけで済みます。

于 2009-10-23T09:11:35.960 に答える
0

おそらくこれ...

$array = array();
foreach ( $array2 as $key=>$val )
{
    switch ( $key )
    {
        case 'bar':
            $array['Alternative bar'] = $val;
            break;
        default:
            $array[$key] = $val;
            break;            
    }
}

「特別な」配列インデックスの場合は、case句を使用します。それ以外の場合は、値をコピーします。

于 2009-10-23T11:25:16.770 に答える
0

私が正しく理解していれば、array1から特定のキーを抽出し、存在しないキーを空の文字列に設定したいとします。このようにしてください:

# Added lots of newlines to improve readability
$array2 = array_intersect_key(
    array(
        'bla' => '',
        'bla2' => '',
        'foo' => '',
        # ...
    ),
    $array1
);
于 2009-10-23T09:18:27.583 に答える