Получение значений из ассоциативного массива
У меня есть следующий основной массив, называемый $m
Array
(
[0] => Array
(
[home] => Home
)
[1] => Array
(
[contact_us] => Contact Us
)
[2] => Array
(
[about_us] => About Us
)
[3] => Array
(
[feedback_form] => Feedback Form
)
[4] => Array
(
[enquiry_form] => Products
)
[5] => Array
(
[gallery] => Gallery
)
)
У меня есть значения, например home, contact_us в массиве, хранящем $options, мне нужно получить значения из основного массива с именем $m, используя массив $options
например. Если массив $options имеет значение home, мне нужно получить значение Home из основного массива ($ m)
мой код выглядит следующим образом
$c = 0;
foreach($options as $o){
echo $m[$c][$o];
++$c;
}
Я как-то просто не могу получить значения из основного массива?
Ответы
Ответ 1
Сначала я преобразовал $m
в более простой массив только с одним уровнем:
$new_m = array();
foreach ($m as $item) {
foreach ($item as $key => $value) {
$new_m[$key] = $value;
}
}
Затем вы можете использовать:
foreach ($options as $o) {
echo $new_m[$o];
}
Ответ 2
Попробуйте следующее:
foreach($options as $o){
foreach($m as $check){
if(isset($check[$o])) echo $check[$o];
}
}
Хотя было бы лучше иметь массив, заполненный только страницами, а не многомерным массивом
Ответ 3
Предполагая, что ключи в вспомогательных массивах уникальны, вы можете
- объединить все вспомогательные массивы в один массив, используя call_user_func_array на array_merge
- ключи обмена и значения вашего массива параметров
- Используйте array_intersect_key для извлечения массива со всеми значениями.
Пример примерно так:
$options = array('about_us', 'enquiry_form');
$values = array_intersect_key(
call_user_func_array('array_merge', $m), // Merge all subarrays
array_flip($options) // Make values in options keys
);
print_r($values);
что приводит к:
Array
(
[about_us] => About Us
[enquiry_form] => Products
)
Ответ 4
Как это?
foreach( $options as $option )
{
foreach( $m as $m_key => $m_value )
{
if( $option == $m_key )
{
echo 'Name for ' . $options . ' is ' . $m_value;
break;
}
}
}
Ответ 5
Вы уверены, что массив параметров находится в том же порядке, что и $m? Может быть, вы, ваш
echo $m[$c][$o];
разрешается в $m [0] ['gallery'], который, очевидно, пуст.
вы можете попробовать разные решения, для меня приятный (может быть, не очень эффективный), должен быть таким:
for($c=0, $limit=count($c); $c < $limit; $c++)
if (array_search(key($m[$c]), $options))
echo current($m[$c]);
Если вы хотите использовать свой подход, нужно сгладить массив таким образом:
foreach ($m as $o)
$flattenedArray[key($o)]=current($o);
foreach ($options as $o)
echo $flattenedArray($o);
Выполнение этого, тем не менее, устраняет повторяющиеся голоса исходного массива, если есть такие дубликаты.
Ответ 6
Попробуйте использовать рекурсивную функцию array_walk, например
$a = array(
array('ooo'=>'yeah'),
array('bbb'=>'man')
);
function get_array_values($item, $key){
if(!is_numeric($key)){
echo "$item\n";
}
}
array_walk_recursive($a,'get_array_values');
Ответ 7
$trails1 = array();
foreach ($trails as $item) {
foreach ($item as $key => $value) {
$trails1[].= $value;
}
}
echo '<pre>';print_r($trails1);
exit;