【问题标题】:PHP Remove index position of both arrays in a multidimensional array are nullPHP删除多维数组中两个数组的索引位置为空
【发布时间】:2018-10-04 19:29:56
【问题描述】:

如果我有这样的数组:

数组:2 [▼ “姓氏” => 数组:3 [▼ 0 => "射线" 1 => 空 2 => “梗犬” ] “爱好” => 数组:3 [▼ 0 => "钢琴" 1 => 空 2 => “篮球” ] ]

我想要的结果:

雷|钢琴 梗犬|篮球

如何删除多维数组的两个索引 1,同时确保仍然保留只有 one 内部数组和空索引的多维数组?

所以如果我有一个这样的数组:

数组:2 [▼ “姓氏” => 数组:3 [▼ 0 => "射线" 1 => 空 2 => “梗犬” ] “爱好” => 数组:3 [▼ 0 => "钢琴" 1 => “滑冰” 2 => “篮球” ] ]

它会返回:

雷|钢琴 |滑冰 梗犬|篮球

谢谢!

编辑:
这就是我所拥有的,但我相信它会删除任何包含 null 的内容:

        $h2 = '';
        foreach ($tempArray as $key => $value){
            for ($i = 0; $i < count($value); $i++){
                if(is_null($value[$i])){
                    $i++;
                }
                $h2 .= implode($delimiter, array_column($tempArray, $i))."\n";
            }
            break;
        }

【问题讨论】:

  • 你有没有尝试过?结果如何?
  • 我尝试了以下方法,但我相信即使一个数组索引为空,这也会删除我的记录:$h2 = ''; foreach ($tempArray as $key => $value){ for ($i = 0; $i
  • 这是预期结果:RAY|PIANO |SKATING TERRIER|BASKETBALL 吗?
  • 是的,如果可能的话,这是一个预期的结果,如果它完全为空,我想避免一行只有“|”并返回另外两条记录。

标签: php arrays laravel multidimensional-array output


【解决方案1】:

为此,我做了以下工作:

  • 将子数组项组合在一起(mergedValues 变量),如下所示: [ 0 =&gt; ["RAY", "PIANO"], 1 =&gt; [null, null]...]
  • 过滤掉仅包含空值的数组(cutNulls 变量)
  • 生成的最终字符串

    <?php
    
    $input = [
        "LAST NAME" => [
            0 => "RAY",
            1 => null,
            2 => "TERRIER",
            3 => null
        ],
        "HOBBY" => [
            0 => "PIANO",
            1 => null,
            2 => "BASKETBALL",
            3 => "TENNIS"
        ]
    ];
    
    $mergedValues = array_reduce(
        $input,
        function (array $out, array $in) {
            foreach ($in as $key => $value) {
                $out[$key][] = $value;
            }
            return $out;
        },
        []
    );
    
    $cutNulls = array_filter(
        $mergedValues,
        function (array $vals) {
            return !empty(array_filter($vals));
        }
    );
    
    $finalString = array_reduce(
        $cutNulls,
        function (string $out, array $values) {
            return $out .= implode("|", $values) . "\n";
        },
        ""
    );
    
    echo $finalString;
    

【讨论】:

  • 太棒了!谢谢!
【解决方案2】:

使用array_combine 函数。命令是:

array array_combine ( array $keys , array $values )

$keys 数组的值成为 $values 中值的键。例如:

cholmes@felix:~/project$ php -a
Interactive mode enabled

php > $m = array(0=>"thing1", 1=>null, 2=>"thing3");
php > $n = array(0=>"apples", 1=>"dull", 2=>"klog");
php > $l = array_combine($m, $n);
php > var_dump($l);
array(3) {
  ["thing1"]=>
  string(6) "apples"
  [""]=>
  string(4) "dull"
  ["thing3"]=>
  string(4) "klog"
}

这里需要注意两点:

  • 使用 null 作为键会导致空字符串 ""
  • 该命令假定您使用的是编号数组。我还没有研究过当您使用关联输入或缺少某些索引时会发生什么。

【讨论】:

    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多