PHP Remove позиция индекса обоих массивов в многомерном массиве равна нулю - PullRequest
0 голосов
/ 04 октября 2018

Если у меня есть такой массив:


    array:2 [▼
      "LAST NAME" => array:3 [▼
        0 => "RAY"
        1 => null
        2 => "TERRIER"
      ]
      "HOBBY" => array:3 [▼
        0 => "PIANO"
        1 => null
        2 => "BASKETBALL"
      ]
    ]

Мой желаемый результат:


    RAY|PIANO
    TERRIER|BASKETBALL

Как я могу удалить оба индекса 1 моего многомерного массива, убедившись, что многомерныймассив, который имеет только один внутренний массив с нулевым индексом, все еще сохраняется?

Итак, если у меня есть такой массив:


    array:2 [▼
      "LAST NAME" => array:3 [▼
        0 => "RAY"
        1 => null
        2 => "TERRIER"
      ]
      "HOBBY" => array:3 [▼
        0 => "PIANO"
        1 => "SKATING"
        2 => "BASKETBALL"
      ]
    ]

Он вернет:


    RAY|PIANO
    |SKATING
    TERRIER|BASKETBALL

Спасибо!

Редактировать:
Это то, что у меня есть, но я считаю, что оно удаляет все, что содержит нуль:

        $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;
        }

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Для этого я сделал следующее:

  • сгруппировал элементы подмассива вместе (переменная mergedValues), после того, как это выглядит так: [ 0 => ["RAY", "PIANO"], 1 => [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;
    
0 голосов
/ 04 октября 2018

Используйте функцию 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"
}

Здесь следует отметить два элемента:

  • Использование пустого ключа в качестве ключа приводит к пустой строке ""
  • Команда предполагает, что выИспользуем пронумерованные массивы.Я не исследовал, что происходит, когда вы используете ассоциативные входы или отсутствуют некоторые индексы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...