Меняя Несколько массивов в только массив


В данном процессе моей системе, я получаю в качестве возвращаемого значения функции array characteristics этого array и может содержать различные сведения, в том числе других arrays, имен, для каждого типа информации. Ex:

Apartamento:
Characteristics => [
 ["external_area"]=>
    array(5) {
      [0]=> "varanda"
      [1]=> "lavanderia"
      [2]=> "piscina"
      [3]=> "muros"
      [4]=> "area_serviço"
    }
    ["bedroom"]=>
     array(12) {
      [0]=> "piso_frio"
      [1]=> "alvenaria"
      [2]=> "azulejo_teto"
      [3]=> "massa_corrida"
      }
   ]

Casa:
Characteristics => [
 ["internal_area"]=>
    array(5) {
      [0]=> "mesa de madeira"
      [1]=> "area"
    }
    ["options"]=>
     array(12) {
      [0]=> "2 andares"
      [1]=> "banheiro externo"
      }
   ]

И я хочу, чтобы все, оставайся в массив только, например, квартира будет выглядеть:

Characeristics => [
   [0]=> "varanda"
   [1]=> "lavanderia"
   [2]=> "piscina"
   [3]=> "muros"
   [4]=> "area_serviço"
   [5]=> "piso_frio"
   [6]=> "alvenaria"
   [7]=> "azulejo_teto"
   [8]=> "massa_corrida"
]

EDIT: Вспомнив, что я не знаю имена arrays, который поставляется в Characteristics

 1
Author: Kenny Rafael, 2016-11-03

4 answers

Когда я нуждалась в этом, и я использовал это решение.

function flatten($array) {
    $return = array();
    array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
    return $return;
}

Этот способ работает независимо от числа суб-массивы, что вы имеете, а также не зависит от ключей. Ex.: https://eval.in/671144

 3
Author: Ricardo Moraleida, 2017-05-23 12:37:26

Вы Можете использовать функцию array_walk_recursive:

array_walk_recursive($array, function ($item, $key) 
{
    global $Characeristics;
    if (! is_array( $item ) ) $Characeristics[] = $item;
});

$result = array( "Characeristics" => $Characeristics );

То есть, если значение, которое вы проводите в настоящее время не являетесь array (будет твоя string признака) добавляется в новый массив.

Работает на ideone

 2
Author: Jorge B., 2016-11-03 11:54:39

Пример того, как можно сделать:

$arr = array(
    0 => array(1, 2, 3),
    1 => array(4, 5, 6)
);

$rs = array();
foreach ($arr as $v) {
    $rs = array_merge($rs, array_values($v));
}
unset($arr);

print_r($rs);

Имейте в виду, что это пример. Массив исходный вопрос имеет один уровень, однако, можно решить с той же логике.

Чтобы ваше дело должно остаться что-то вроде:

$rs = array('Characteristics' => array()); // Esse array serve para guardar o resultado final

foreach ($arr['Characteristics']['external_area'] as $v) {
    //aqui mescla os valores
    $rs['Characteristics'] = array_merge($rs, array_values($v));
}
unset($arr); // Se não precisar mais desses dados, apague-os

print_r($rs);

Имена ключей

Если имя первого ключа, неизвестно, может получить его через функцию key()

$arr['a']['b'] = array();
echo key($arr['a']);
// retorna 'b'

В вашем конкретном случае:

$arr['Characteristics']['external_area'] = array();
echo key($arr['Characteristics']);
// retorna 'external_area'

Реализация в коде

$rs = array('Characteristics' => array()); // Esse array serve para guardar o resultado final

$k = key($arr['Characteristics']); // obtém o nome da primeira chave

foreach ($arr['Characteristics'][$k] as $v) {
    //aqui mescla os valores
    $rs['Characteristics'] = array_merge($rs, array_values($v));
}
unset($arr); // Se não precisar mais desses dados, apague-os

print_r($rs);
 1
Author: Daniel Omine, 2016-11-03 11:34:11

Я Разработал функцию, которая проходит через массив и будет путем объединения array, взгляните, я считал, массив $characteristics, как первый, который вы отправили в вопросе, надеюсь, что это помогает

var_dump(getAllCharacteristics($characteristics));
die;

function getAllCharacteristics($characteristics) {
    $newArray = [];
    foreach ($characteristics as $characteristic) {
        if (is_array($characteristic)) {
            $newArray = array_merge($newArray, getAllCharacteristics($characteristic));
        } else {
            $newArray[] = $characteristic;
        }
    }
    return $newArray;
}

Выход функции var_dump будет иметь вид:

array(9) {
  [0]=>
  string(7) "varanda"
  [1]=>
  string(10) "lavanderia"
  [2]=>
  string(7) "piscina"
  [3]=>
  string(5) "muros"
  [4]=>
  string(13) "area_serviço"
  [5]=>
  string(9) "piso_frio"
  [6]=>
  string(9) "alvenaria"
  [7]=>
  string(12) "azulejo_teto"
  [8]=>
  string(13) "massa_corrida"
}
 0
Author: , 2016-11-03 11:35:05