Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从一维数组到二维数组_Php_Multidimensional Array_Split - Fatal编程技术网

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

我有一个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
    )
我想要一个新的阵列,看起来像(我认为这是二维的…?)

我可以对关键元素使用拆分方法吗

再努力一点。。。我还需要在一个“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]);
    }
}