php - propiedad - Obtención de valores de matriz asociativa
array asociativo php (7)
Tengo la siguiente matriz principal llamada $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
)
)
Tengo los valores, por ejemplo, home, contact_us en una matriz $ options, necesito obtener los valores de la matriz principal llamada $ m usando la matriz $ options
p.ej. Si la matriz $ options tiene valor de inicio, necesito obtener el valor Inicio de la matriz principal ($ m)
mi código se ve como sigue
$c = 0;
foreach($options as $o){
echo $m[$c][$o];
++$c;
}
¿De alguna manera no puedo recibir los valores de la matriz principal?
¿Cómo es esto?
foreach( $options as $option )
{
foreach( $m as $m_key => $m_value )
{
if( $option == $m_key )
{
echo ''Name for '' . $options . '' is '' . $m_value;
break;
}
}
}
¿Está seguro de que la matriz de opciones está en el mismo orden de $ m? Tal vez tu eres tu
echo $m[$c][$o];
se está resolviendo en $ m [0] [''galería''] que obviamente está vacía.
Puedes probar diferentes soluciones, para mí, una buena (quizás no tan eficiente) debería ser así:
for($c=0, $limit=count($c); $c < $limit; $c++)
if (array_search(key($m[$c]), $options))
echo current($m[$c]);
Si desea utilizar su enfoque, debe aplanar su matriz con algo como esto:
foreach ($m as $o)
$flattenedArray[key($o)]=current($o);
foreach ($options as $o)
echo $flattenedArray($o);
Sin embargo, al hacer esto, se eliminan las voces duplicadas de su matriz original si existen tales duplicados.
Intente usar una función recursiva array_walk, por ejemplo
$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'');
Primero transformaría $m
en una matriz más simple con un solo nivel:
$new_m = array();
foreach ($m as $item) {
foreach ($item as $key => $value) {
$new_m[$key] = $value;
}
}
Entonces puedes usar:
foreach ($options as $o) {
echo $new_m[$o];
}
Prueba esto:
foreach($options as $o){
foreach($m as $check){
if(isset($check[$o])) echo $check[$o];
}
}
Aunque sería mejor que la matriz se rellenara solo con las páginas y no con una matriz multidimensional
Suponiendo que las claves en los arreglos de sub sean únicas, usted puede
- fusionar todas las matrices secundarias en una única matriz utilizando call_user_func_array en array_merge
- Intercambie claves y valores de su matriz de opciones.
- Use array_intersect_key para recuperar una matriz con todos los valores.
Ejemplo como tal:
$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);
lo que resulta en:
Array
(
[about_us] => About Us
[enquiry_form] => Products
)
$trails1 = array();
foreach ($trails as $item) {
foreach ($item as $key => $value) {
$trails1[].= $value;
}
}
echo ''<pre>'';print_r($trails1);
exit;