Могу ли я использовать geoip_country_code_by_name для показа определенного контента более чем в одну страну?

В настоящее время я использую функцию php geoip_country_code_by_name для обработки различного контента для разных стран из массива, который выглядит следующим образом:

<?php

    $content = array(
        'GB' => array(
            'meta_description'  => "Description is here",
            'social_title'      => "Title here",
            'country_content_js'   => "js/index.js",
        ),
        'BR' => array(
            'meta_description'  => "Different Description is here",
            'social_title'      => "Another Title here",
            'country_content_js'   => "js/index-2.js",
        ),
    );

?>

Но у меня есть только конкретный контент для Бразилии и Великобритании. Я хочу, чтобы любая другая страна, получающая доступ к странице, обслуживала массив контента по умолчанию, который будет отличаться от BR и GB.

Есть ли способ создать правило, которое обслуживает набор содержимого по умолчанию для любой страны, которая не указана в моем массиве?

1 ответ

Решение
$content = array(
    'GB' => array(
        'meta_description'  => "Description is here",
        'social_title'      => "Title here",
        'country_content_js'   => "js/index.js",
    ),
    'BR' => array(
        'meta_description'  => "Different Description is here",
        'social_title'      => "Another Title here",
        'country_content_js'   => "js/index-2.js",
    )
);

Вы можете ссылаться на ключ, используя другой ключ "По умолчанию", например, так;

$content['Default'] =& $content["GB"];
var_dump($content);
exit;

В качестве альтернативы, если вы заказали значение, которое вы возвращаете из БД или где-либо еще, вы можете прочитать первую запись в массиве так: $aDefault =& $content[array_keys($content)[0]];

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

// define default 
define("DEFAULT_LANGUAGE", 'GB');

// would need to guarentee its there
$aDefault =& $content[DEFAULT_LANGUAGE];

Последнее, что вы могли бы объединить выше, так что, если он не может найти этот язык, вы можете просто использовать первый доступный;

// define, can be placed in an included config folder
define("DEFAULT_LANGUAGE", 'GB');

$content = array(
    'GBs' => array(
        'meta_description'  => "Description is here",
        'social_title'      => "Title here",
        'country_content_js'   => "js/index.js",
    ),
    'BR' => array(
        'meta_description'  => "Different Description is here",
        'social_title'      => "Another Title here",
        'country_content_js'   => "js/index-2.js",
    )
);

// does the default language exist?
if( isset($content[DEFAULT_LANGUAGE]) ){
    // yes, create a default array key and reference the required element in the array
    $content['Default'] =& $content[DEFAULT_LANGUAGE];
}else{
    // no, create a default array key and reference the first element
    $content['Default'] =& $content[array_keys($content)[0]];
}

var_dump($content);
exit;
Другие вопросы по тегам