想象一下,我想从另一个数组创建一个数组,如下所示:
$array = array('bla' => $array2['bla'],
'bla2' => $array2['bla2'],
'foo' => $array2['foo'],
'Alternative Bar' => $array['bar'],
'bar' => $array2['bar']);
测试$ array2的最佳方法是将该索引传递给另一个数组,而不对每个我想要添加的索引使用if。
请注意,$ array中的键可以与$ array2
不同答案 0 :(得分:2)
我所做的是,使用我想要的密钥为数组创建模板,例如
$template = array('key1', 'key2', 'key3');
然后,我会将模板与其他数组合并,如果第二个数组中缺少任何键,那么键的值将为null,这样我就没有告诉我偏移的警告问题值。
$template = array('key1', 'key2', 'key3');
$array = array_merge($template, $otherarray);
答案 1 :(得分:1)
如果我理解正确......
$a = array('foo' => 1, 'bar' => 2, 'baz' => 3);
$keys = array('foo', 'baz', 'quux');
$result = array_intersect_key($a, array_flip($keys));
这将只从$ a
中选择现有的密钥答案 2 :(得分: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'] : '')
);
如果这种情况发生得更加动态,我建议使用array_intersect_key,就像soulmerge发布的一样。但是这种方法可以权衡只能使用具有相同密钥的数组。
由于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中定义不同的键。
答案 3 :(得分:0)
如果我理解你的话,你想从array1中提取某些键并将不存在的键设置为空字符串。这样做:
# Added lots of newlines to improve readability
$array2 = array_intersect_key(
array(
'bla' => '',
'bla2' => '',
'foo' => '',
# ...
),
$array1
);
答案 4 :(得分:0)
也许这......
$array = array();
foreach ( $array2 as $key=>$val )
{
switch ( $key )
{
case 'bar':
$array['Alternative bar'] = $val;
break;
default:
$array[$key] = $val;
break;
}
}
对于任何“特殊”数组索引,请使用case
子句,否则只需复制该值。