我有这个PHP一维数组:
Array
(
[Female--N] => 11
[Male--N] => 11
[Humans--N] => 11
[Adult--N] => 8
[Adolescent--N] => 8
[Reaction Time-physiology--N] => 6
[Acoustic Stimulation-methods--N] => 6
[Schizophrenia-genetics--Y] => 5
[Motion Perception--N] => 3
)
我想要一个新的阵列,看起来像(我觉得这个拖曳......?):
Array
(
[Female][N] => 11
[Male][N] => 11
[Humans][N] => 11
[Adult][N] => 8
[Adolescent][N] => 8
[Reaction Time-physiology][N] => 6
[Acoustic Stimulation-methods][N] => 6
[Schizophrenia-genetics][Y] => 5
[Motion Perception][N] => 3
)
我可以在关键元素上使用split方法吗?
有点难......我还需要拆分单个'_'下划线,我这样做是为了防止列混淆......但是下面的例子不能正常工作... < / p>
$new_array = array();
foreach($MeshtagsArray as $key => $value) {
$parts = explode('__', $key, 2);
$parts2 = explode('_', $key, 2);
$new_array[] = array(
'discriptor' => $parts[0],
'qualifier' => $parts2[1],
'major' => $parts[1],
'#occurence' => $value
);
所以输出应该是这样的:
[0] => Array
(
[discriptor] => Female
[qualifier] =>
[major] => N
[#occurence] => 11
........
[5] => Array
(
[discriptor] => Reaction Time
[qualifier] => physiology
[major] => N
[#occurence] => 6
祝你好运, 泰斯
答案 0 :(得分:2)
更新
$new_array = array();
foreach($old_array as $key => $value) {
$parts1 = explode('--', $key, 2);
$parts2 = explode('-', $parts1[0], 2);
$new_array[] = array(
'descriptor' => $parts2[0],
'qualifier' => count($parts2) > 1 ? $parts2[1] : '',
'major' => $parts1[1],
'#occurence' => $value
);
}
$new_array
现在将是一个数字索引的多维数组。每个顶级键都包含您需要的元素的关联数组。
将来,您可以从一开始就解释整个问题,这样我们就能更好地帮助您!
解释
根据php.net:
数组爆炸(字符串 $ delimiter ,字符串 $ string [,int $ limit ])
返回一个字符串数组,每个字符串都是 string 的子字符串,通过在字符串 delimiter 形成的边界上将其拆分而形成。
你问题中的数组是关联的;它的键是字符串。这使得使用foreach
迭代数组并将键分解为部分是一件简单的事情。我使用limit参数来确保不超过两个部分。
此外,由于一个分隔符是另一个分隔符的双重版本,我们必须首先在双--
分隔符上爆炸,然后在单个-
分隔符上爆炸。
从技术上讲,我们可以使用单个爆炸 - 没有限制参数 - 和单个-
分隔符。然后我们可以推断出哪个元素部分属于哪里。但是,有时候没有qualifier
。为了解决这个问题,我使用了两个爆炸,并使用了一个三元运算符来计算第二次爆炸中返回的元素数量。
答案 1 :(得分:0)
尝试此功能:
function convertArray($array)
{
$return = array();
foreach ($array as $key=>$value)
{
$exploded = explode('--', $key);
$return[$exploded[0]][$exploded[1]] = $value;
}
return $return;
}
答案 2 :(得分:0)
假设您正在分割--
而您想要一个二维数组,请尝试以下方法。
foreach ($the_array as $key => $value) {
// split key into new indexes
$indexes = explode('--', $key);
if (count($indexes) == 2) {
// create new dimension and set value
$the_array[$indexes[0]][$indexes[1]] = $value;
// remove old index
unset($the_array[$key]);
}
}
注意:这会转换原始数组并确保密钥包含--