2016-10-17 4 views
0

У меня есть массив следующим образом:Как создать php-ключи из значений массивов?

$input = array("visit", "outdoor", "parks-trailer"); 
$input_content = "A Value for last array element for input array." 

$another_input = array("visit", "outdoor"); 
$another_input_content = "A Value for last array element for $input_content array." 

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

В принципе, то, что мне нужно, возвращаемый массив будет так:

$output = array(
    "visit" => array(
     "outdoor" => array(
      "A Value for last array element for $input_content array." 
      "parks-trailer" => "A Value for last array element for input array." 
     ) 
    ) 
); 

Как я могу это сделать из значений входного массива $, что всегда будет 1 мерными.

$content = 'My Value'; 
$output = array(); 
$flipped = array_flip($input); 
$count = count($input) - 1; 

foreach($flipped as $key => $flip) 
{ 
    if ($count >= $key) 
     $output[$key] = $content; 
    else 
     $output[$key] = array(); 
} 

Проблема здесь в том, что array_flip действительно работает, но здесь он не является многомерным? И поэтому array_flip преобразуется в array('visit' => 0, 'outdoor' => 1, 'parks-trailer' => 2), но я не понимаю, как заставить его делать многомерный массив, а не сингулярный.

Мне нужно пройти через их кратность и как-то объединить их в глобальный массив, ответ здесь не тот.

Итак, мне нужно объединить каждый 1 из них в другой массив, сохраняя значения, если они существуют. array_merge не сохраняет значения, array_merge_recursive не сохраняет одну и ту же ключевую структуру. Как это сделать?

+0

Будет вводный массив всегда будет 1-мерным? – BenM

+0

Нет, это могут быть разные значения из массива –

+0

Как это понимать? Будет ли массив, который вы хотите использовать, всегда быть одномерным? – BenM

ответ

1

Я не уверен, уверен, почему вы хотели бы такую ​​вещь, но это вариант:

$ar = ['a', 'b', 'c']; 

function arrayMagicFunction($ar, $last_string = 'STRING') { 
    $ret = $last_string; 
    $ar = array_reverse($ar); 
    foreach ($ar as $v) { 
     $ret = [$v => $ret]; 
    } 
    return $ret; 
} 
var_dump(arrayMagicFunction($ar, 'A Value here')); 

Выход:

array(1) { 
    'a' => 
    array(1) { 
    'b' => 
    array(1) { 
     'c' => 
     string(12) "A Value here" 
    } 
    } 
} 
+0

@AbraCadaver, нижняя сторона - это потому, что я не искал дублирующий вопрос, прежде чем отвечать? Просто хотел убедиться ... потому что я на 100% уверен, что ответ правильный. – Dekel

+0

Просто, чтобы вы могли видеть, что нисходящий поток не был моим, я просто опустил его. – AbraCadaver

+0

и причина? – Dekel