请帮我解决一个我真的陷入PHP的问题
我有一个大阵列
$a = array(
'foo_1' => 'Dog',
'bar_1' => 'Cat',
'baz_1' => 'Fish',
'foo_2' => 'Frog',
'bar_2' => 'Bug',
'baz_2' => 'Ddd',
...
);
它需要在多个数组中进行转换:
$a_1 = array(
'foo' => 'Dog',
'bar' => 'Cat',
'baz' => 'Fish'
);
$a_2 = array(
'foo' => 'Frog',
'bar' => 'Bug',
'baz' => 'Ddd'
);
你注意到有一个小逻辑。大数组应按键组分割(_1,_2,_3; _1,_2,_33)
希望我足够清楚!
由于
答案 0 :(得分:2)
假设密钥总是重复每个 3 项目和的订购,array_chunk
将起作用:
$newArray = array_chunk($a, 3);
答案 1 :(得分:1)
假设$a
具有此结构(因为OP原始数组具有重复键):
$a = array(
'foo_1' => 'Dog',
'bar_1' => 'Cat',
'baz_1' => 'Fish',
'foo_2' => 'Frog',
'bar_2' => 'Bug',
'baz_2' => 'Ddd'
);
您可以通过这种方法转换数组:
$temp = array();
foreach($a as $key=>$val){
$num = substr(strrchr($key, '_'), 1);
$nkey = basename($key, '_'.$num);
$temp[$num][$nkey] = $val;
}
// See what happens
print_r($temp);
答案 2 :(得分:0)
我确定多维数组更好但是这就是你要求的,在“_”之前具有相同字符串的值将被覆盖(丢失),因此你的逻辑可能存在问题。
$array1 = array();
$array2 = array();
$array3 = array();
$bigArray = array('av_1'=>'dghdfg','ab_2'=>'dgdfg');
foreach($bigArray as $key=>$value)
{
$splitKey = explode('_',$key);
$number = $splitKey[1];
$newKey = $splitKey[0];
$varName = "array".$number;
${$varName}[$newKey] = $value;
}
<强>多维:强>
$newBigArray = array();
$bigArray = array('av_1'=>'dghdfg','ab_2'=>'dgdfg');
foreach($bigArray as $key=>$value)
{
$splitKey = explode('_',$key);
$newKey = $splitKey[0];
$number = $splitKey[1];
if(!isset($newBigArray[$newKey])) {
$newBigArray[$newKey] = array();
}
$newBigArray[$newKey][$number] = $value;
}
var_dump($newBigArray);
答案 3 :(得分:0)
获取所有数组条目的键,用下划线字符(_)拆分它们,然后将它们放入数组中。
$a = array(
'foo_1' => 'Dog',
'bar_2' => 'Cat',
'baz_3' => 'Fish',
'foo_1' => 'Frog',
'bar_2' => 'Bug',
'baz_3' => 'Ddd',
...
);
$arrays = array(
'foo' => array(),
'bar' => array(),
'baz' => array()
);
foreach ($a as $k => $v) {
$s = explode("_", $k);
if (!isset($arrays[$s[0]])) {
$arrays[$s[0]] = array();
}
$arrays[$s[0]][$s[1]] = $v; // This line if you want to preserve the index (1, 2, ...)
$arrays[$s[0]][] = $v; // Or this line if you want to reindex the arrays.
// Comment or remove one of these two lines.
}
然后你有一个多维数组:
array(
'foo' => array(
"Dog",
"Frog"
),
'bar' => array(
"Cat",
"Bug"
),
'baz' => array(
"Fish",
"Ddd"
),
...
)
我建议您使用上面的多维数组,但是如果您想为每个'key'(如'foo','bar'等等)创建一个新变量,那么请使用以下代码段:
$a = array(
'foo_1' => 'Dog',
'bar_2' => 'Cat',
'baz_3' => 'Fish',
'foo_1' => 'Frog',
'bar_2' => 'Bug',
'baz_3' => 'Ddd',
...
);
foreach ($a as $k => $v) {
$s = explode("_", $k);
${$s[0]}[$s[1]] = $v; // This line if you want to preserve the index (1, 2, ...)
${$s[0]}[] = $v; // Or this line if you want to reindex the arrays.
// Comment or remove one of these two lines.
}
请注意,您的数组$a
有一些重复的键,这在PHP中是不可能的。
编辑:我看到你解决了。