从一维到二维阵列

时间:2010-12-21 20:19:05

标签: 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-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

祝你好运, 泰斯

3 个答案:

答案 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]);
    }
}

注意:这会转换原始数组并确保密钥包含--