Php 从一维数组到二维数组
我有一个PHP一维数组:Php 从一维数组到二维数组,php,multidimensional-array,split,Php,Multidimensional Array,Split,我有一个PHP一维数组: Array ( [Female--N] => 11 [Male--N] => 11 [Humans--N] => 11 [Adult--N] => 8 [Adolescent--N] => 8 [Reaction Time-physiology--N] => 6 [Acoustic Stimulation-met
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
)
我想要一个新的阵列,看起来像(我认为这是二维的…?)
我可以对关键元素使用拆分方法吗
再努力一点。。。我还需要在一个“u”下划线上拆分,我这样做是为了防止列混淆。。。但是下面的例子做得不好
$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
致以最良好的祝愿,
Thijs已更新
$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_数组
现在将是一个数字索引的多维数组。每个顶级关键点将包含所需元素的关联数组
在将来,请随意从一开始就解释整个问题,这样我们都可以更好地帮助您
解释
根据:
数组分解(字符串$delimiter,字符串$string[,int$limit])
返回字符串数组,每个字符串都是字符串的子字符串,通过在字符串分隔符形成的边界上拆分字符串而形成
问题中的数组是关联的;它的关键是字符串。这使得使用foreach
迭代数组并将键分解为多个部分变得非常简单。我使用一个limit参数来确保不超过两个部分
另外,由于一个分隔符是另一个分隔符的两倍版本,我们必须首先在双--
分隔符上分解,然后在单个-
分隔符上分解
从技术上讲,我们可以使用一个没有限制参数的单爆炸和一个-
分隔符。然后我们就可以推断出哪个元素部分属于哪里。但是,有时没有限定符。为了解决这个问题,我使用了两次分解,以及一个三元运算符来计算第二次分解返回的元素数。试试这个函数:
function convertArray($array)
{
$return = array();
foreach ($array as $key=>$value)
{
$exploded = explode('--', $key);
$return[$exploded[0]][$exploded[1]] = $value;
}
return $return;
}
假设您在
--
上进行拆分,并且想要一个二维数组,请尝试以下操作
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]);
}
}
注意:这将在原始数组上进行转换,并确保密钥包含
--
如果密钥包含两组--
我有点困惑。。。它是有效的。。。这很酷,但是二维数组和有3列的数据表一样吗?如果不是,我如何制作一个由3列组成的数组?我需要把数据:[Female][N]=>11放在一个表中,这样它看起来像:subject:“Female”,Major:“N”,#occurrence“11”。当做它从来没有包含两组-,但它是一个很好的例子!谢谢我编辑了我的问题。。。因为我忘了说需要另一次爆炸。我认为额外的爆炸要困难得多!添加了一个三元组来修复某些键不包含限定符的事实谢谢!!我以后会做的!您好,Thijs您的意思是在单破折号上拆分,而不是下划线,对吗?
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]);
}
}