Меняя Несколько массивов в только массив
В данном процессе моей системе, я получаю в качестве возвращаемого значения функции 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
4 answers
Когда я нуждалась в этом, и я использовал это решение.
function flatten($array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;
}
Этот способ работает независимо от числа суб-массивы, что вы имеете, а также не зависит от ключей. Ex.: https://eval.in/671144
Вы Можете использовать функцию array_walk_recursive
:
array_walk_recursive($array, function ($item, $key)
{
global $Characeristics;
if (! is_array( $item ) ) $Characeristics[] = $item;
});
$result = array( "Characeristics" => $Characeristics );
То есть, если значение, которое вы проводите в настоящее время не являетесь array (будет твоя string признака) добавляется в новый массив.
Пример того, как можно сделать:
$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);
Я Разработал функцию, которая проходит через массив и будет путем объединения 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"
}