将多维阵列与条件相结合的另一个阵列
问题描述:
我有2个阵列,我需要组合成1个阵列。将多维阵列与条件相结合的另一个阵列
$ languages数组应该为每个[语言]数组保存一行[line],并且只保存它自己匹配的[language]值。
第一阵列:
$languages = Array (
[english] => Array()
[germany] => Array()
[russia] => Array()
);
二阵:
$data = Array (
[line0] => Some text
[english0] => English text
[germany0] => Dutch text
[russia0] => Russian text
[line1] => Some more text
[english1] => English some more text
[germany1] => Dutch some more text
[russia1] => Russian some more text
.......
(key's increment by 1)
);
经组合的阵列应该是什么样子:
$languages = Array (
[english] = Array (
[line0] => Some text
[english0] => English text
[line1] => Some more text
[english1] => English some more text
........
(key's increment by 1)
)
[germany] = Array (
[line0] => Some text
[germany0] => Dutch text
[line1] => Some more text
[germany1] => Dutch some more text
......
(key's increment by 1)
)
[russia] = Array (
[line0] => Some text
[russia0] => Russian text
[line1] => Some more text
[russia1] => Russian some more text
........
(key's increment by 1)
)
);
答
参考,下面为你想要的结果的解决方案:
$languages = Array(
'english' => Array(),
'germany' => Array(),
'russia' => Array()
);
$data = Array(
'line0' => 'Some test',
'english0' => 'English test',
'germany0' => 'Dutch test',
'russia0' => 'Russian test',
'line1' => 'Some more test',
'english1' => 'English some more test',
'germany1' => 'Dutch some more test',
'russia1' => 'Russian some more test',
);
$new_array = array();
foreach ($languages as $k => $v) {
foreach ($data as $key => $value) {
if (strpos($key, 'line') !== false || strpos($key, $k) !== false)
$new_array[$k][$key] = $value;
}
}
print_r($new_array);
输出:
Array
(
[english] => Array
(
[line0] => Some test
[english0] => English test
[line1] => Some more test
[english1] => English some more test
)
[germany] => Array
(
[line0] => Some test
[germany0] => Dutch test
[line1] => Some more test
[germany1] => Dutch some more test
)
[russia] => Array
(
[line0] => Some test
[russia0] => Russian test
[line1] => Some more test
[russia1] => Russian some more test
)
)
但随着commen建议你应该创造更好的格式。例如参见下面的例子:
$new_array = array();
foreach ($languages as $k => $v) {
foreach ($data as $key => $value) {
$textarr = str_split($key, strlen($key) - 1);
// print_r($textarr);
if (strpos($key, 'line') !== false || strpos($key, $k) !== false)
$new_array[$k][$textarr[0]][$textarr[1]] = $value;
}
}
print_r($new_array);
输出:
Array
(
[english] => Array
(
[line] => Array
(
[0] => Some test
[1] => Some more test
)
[english] => Array
(
[0] => English test
[1] => English some more test
)
)
[germany] => Array
(
[line] => Array
(
[0] => Some test
[1] => Some more test
)
[germany] => Array
(
[0] => Dutch test
[1] => Dutch some more test
)
)
[russia] => Array
(
[line] => Array
(
[0] => Some test
[1] => Some more test
)
[russia] => Array
(
[0] => Russian test
[1] => Russian some more test
)
)
)
希望这将帮助你。
答
假设:(键的增量由1)
$data
数组。如果没有这个代码会给出未定义索引的错误。
$languageReference
:用作$languages
参考,因为我不希望保存的结果相同的数组,但如果你愿意,你可以。
$reference
:在$data
阵列end()
功能的节能基准将移动内部指针,以结束阵列的所以不想处理原始数组。
$languageReference = $languages;
$reference = $data;
end($reference);
$lastKey = key($reference);
$count = (int) $lastKey[strlen($lastKey) - 1];
foreach ($languageReference as $lang => $langData) {
for ($index = 0; $index <= $count; $index++) {
$languageReference[$lang]['line' . $index] = $data['line' . $count];
$languageReference[$lang][$lang . $index] = $data[$lang . $count];
}
}
echo "<pre>";
var_dump($languageReference);
输出:
array(3) {
["english"]=>
array(4) {
["line0"]=>
string(14) "Some more text"
["english0"]=>
string(22) "English some more text"
["line1"]=>
string(14) "Some more text"
["english1"]=>
string(22) "English some more text"
}
["germany"]=>
array(4) {
["line0"]=>
string(14) "Some more text"
["germany0"]=>
string(20) "Dutch some more text"
["line1"]=>
string(14) "Some more text"
["germany1"]=>
string(20) "Dutch some more text"
}
["russia"]=>
array(4) {
["line0"]=>
string(14) "Some more text"
["russia0"]=>
string(22) "Russian some more text"
["line1"]=>
string(14) "Some more text"
["russia1"]=>
string(22) "Russian some more text"
}
}
答
只是为了尝试。 对于正确的方法看扯谈的答案
$newArray = array();
$finalArray = array();
$thirdArray = array('line','english','germany','russia'); // for formatting 2nd array
//$data is secondArray
$countData = count($data);
for($i=0;$i<$countData/4;$i++)
{
foreach ($thirdArray as $key => $value) {
$newArray[$i][$value.$i] =$data[$value.$i]; //formatting array
}
}
foreach($newArray as $key=>$val)
{
foreach($languages as $k=>$v){
$finalArray[$k][line.$key] = $newArray[$key][line.$key];
$finalArray[$k][$k.$key] = $newArray[$key][$k.$key];
}
}
print_r($finalArray); // outputs desired results
那么你为了得到这种结构试过吗? – RiggsFolly
您将从一些结构错误的数据开始,即第二个数组,并且您希望在结果数组中保留该错误结构。再想想你是如何创建第二个数组 – RiggsFolly