PHP 多维数组

问题描述 投票:0回答:4
Array
(
    [a] => Array
        (
            [a] => Array
                (
                    [a] => a
                    [b] => b
                )

            [b] => Array
                (
                    [a] => a
                    [b] => b
                )

        )

    [b] => Array
        (
            [a] => Array
                (
                    [a] => a
                    [b] => b
                )

            [b] => Array
                (
                    [a] => a
                    [b] => b
                )

        )

)

如何从上面的数组中获取下面的字符串?

aaa,aab,aba,abb,baa,bab,bba,bbb
php multidimensional-array
4个回答
7
投票

您可以简单地编写一个递归函数来自动将键连接在一起。

function getKeysString($array, $prefix = '') {  
  $keys = array();

  foreach($array as $key => $value) {
    $str = $prefix.$key;

    if(is_array($value)) {
      $str = getKeysString($value, $str);
    }

    $keys[] = $str;
  }

  return implode(',', $keys);
}

所以,给定数组:

$arr = array (
  'a' => array (
    'a' => array (
      'a' => null,
      'b' => null
    ),
    'b' => array (
      'a' => null,
      'b' => null
    )
  ),
  'b' => array (
    'a' => array (
      'a' => null,
      'b' => null
    ),
    'b' => array (
      'a' => null,
      'b' => null
    )
  )
);

以下将为您提供您想要的结果:

$result = getKeysString($arr);

2
投票
 $str = array();
foreach($array as $key1 => $value1)
{
   foreach($value1 as $key2 => $value2)
   {
     foreach($value2 as $key3 => $value3)
        $str[]= $key1.$key2.$key3;
   }
}

echo implode(',', $str);

0
投票

我想添加一个基于@AndrewMoore 脚本的现代函数式递归函数。

逻辑没有改变。迭代级别的所有键。如果该值为数组,则遍历该数组。将携带的前缀添加到每个遇到的键之前。

array_map()
版本:(演示

function getKeyPaths(array $array, string $prefix = ''): string
{
    return implode(
        ',',
        array_map(
            fn($k, $v) => is_array($v) ? getKeyPaths($v, "$prefix$k") : "$prefix$k",
            array_keys($array),
            $array
        )
    );
}

var_export(getKeyPaths($array));

array_reduce()
版本:(演示

function getKeyPaths(array $array, string $prefix = ''): string
{
    return implode(
        ',',
        array_reduce(
            array_keys($array),
            fn($carry, $k) => $carry
                + [
                   $k => is_array($array[$k])
                       ? getKeyPaths($array[$k], "$prefix$k")
                       : "$prefix$k"
                ],
            []
        )
    );
}
var_export(getKeyPaths($array));

-1
投票

PHP 中的多维数组

$Student = array(array("Adam",10,10),

                array("Ricky",10,11),

                array("Bret",15,14),

                array("Ram",14,17)
          );

for($i=0;$i<=3;$i++){

    for($j=0;$j<=2;$j++){
        print_r($Student[$i][$j]);

        echo "<br>";    
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.