2014-12-18 2 views
0

Я написал сценарий, который я хочу использовать для динамического изменения фона <div> на основе города, в котором находится пользователь. Город пользователей отображается в переменной $city = 'New York';.Используйте PHP-массив для создания динамического фонового изображения

У меня есть массив в PHP, который обрабатывает города и изображения, связанные:

$cities = array(
    "Boston" => array(
      'name' => 'Boston', 
      'bg' => 'bs.png' 
    ),         
    "New York" => array(
      'name' => 'New York', 
      'bg' => 'ny.png' 
    ), 
    "Denver" => array(
      'name' => 'Denver', 
      'states' => 'CO', 'WY', 'NE' 
    ), 
); 

У меня возникли проблемы при записи, если заявление, что будет распознаваться город и вытягивать его в <style> тег. Это то, что я написал, но он вообще не работает:

if ($city === in_array($city, $cities)) { 
       echo '<style> 
        .header { 
         background: url(img/'.$cities['bg'].') no-repeat center center scroll; 
         -webkit-background-size: cover; 
         -moz-background-size: cover; 
         background-size: cover; 
         -o-background-size: cover; 
        } 
        </style>'; 
      } else { 
       echo '<style> 
        .header { 
         background: url(img/bg.jpg) no-repeat center center scroll; 
         -webkit-background-size: cover; 
         -moz-background-size: cover; 
         background-size: cover; 
         -o-background-size: cover; 
        } 
        </style>'; 
      } 

Что я делаю неправильно?

ответ

2

$cities['bg'] всегда будет неопределенным. Вы должны убедиться, что он установлен. Вы можете использовать isset() только должны сделать одно условие проверки:

<?php 
$cities = array(
    "Boston" => array(
      'name' => 'Boston', 
      'bg' => 'bs.png' 
    ),         
    "New York" => array(
      'name' => 'New York', 
      'bg' => 'ny.png' 
    ), 
    "Denver" => array(
      'name' => 'Denver', 
      'states' => 'CO', 'WY', 'NE' 
    ), 
); 

$city = 'New York'; 

$bg = 'bg.jpg'; 

if (isset($cities[$city]['bg'])){ 
    $bg = $cities[$city]['bg']; 
} 

echo <<<EOD 
    <style> 
    .header { 
     background: url(img/{$bg}) no-repeat center center scroll; 
     -webkit-background-size: cover; 
     -moz-background-size: cover; 
     background-size: cover; 
     -o-background-size: cover; 
    } 
    </style> 
EOD; 
+0

спасибо за быстрый ответ. Как установить его, если он не установлен ... – Rizzo

+0

с помощью 'isset()' будет проверять, существует ли он, тогда вы можете использовать: $ city [$ city] ['bg'] 'для извлечения значения –

4

Функция in_array возвращает логическое значение, поэтому вам не нужна проверка сравнения. Просто используйте следующие условные:

if (in_array($city, $cities)) { ... } 
+0

Спасибо, я старался как 'array_search()' и 'in_array' У меня возникли проблемы с, если сравнение заявления отображаются изображения, если он существует .. – Rizzo

Смежные вопросы