2014-05-17 17 views
8
$lang = array(
     'thank you'=>'You are welcome', 
     'thanks'=>'You are welcome', 
     'thank ya'=>'You are welcome' 
    ); 

Như bạn có thể thấy điều này sẽ khiến việc viết nhiều khóa cho cùng một giá trị là có cách nào tôi có thể làm.Chỉ định nhiều khóa cho cùng một giá trị trong mảng

$lang['thanks']=>$lang['thank ya']=>$lang['thank you'] 

Chỉ cần cố gắng tự cứu lấy mình một chút thời gian ở đây từ viết lại một trăm lần

lớp PHP chức năng:

function fetch_key($key, $l,$bool){ 
    $dynamic = new l18n; 
    if($bool == true or is_null($bool)){ 
     return addslashes($dynamic->convert($key,$l)); 
    }else{ 
     return $dynamic->convert($key,$l); 
    } 
    } 

EX

$lang = array(
     'thank you'=>'You are welcome', 
     'thanks'=>'You are welcome', 
     'thank ya'=>'You are welcome', 
     'hello'=>'hello', 
     'goodbye'=>'goodbye' 
    ); 

Vì vậy, tôi cần để làm cho nó để nó thêm nó vào mảng và không điền vào các giá trị khóa của tôi ith cùng một giá trị khi trên thực tế chúng không giống nhau. Tôi nên đã tuyên bố này trong đầu

+5

Tôi sẽ lật mảng để ''Bạn được chào đón 'điểm cho tất cả các tương đương có thể thay vì tất cả các tương đương trỏ đến cùng một giá trị. Điều đó sẽ sử dụng ít bộ nhớ hơn. –

+0

Hmmm thấy tôi có một mảng rất dài và tôi sử dụng các lớp như: xem cập nhật mới của tôi. chúng tôi sử dụng JS để tìm kiếm chuỗi dưới dạng thuật toán và sau đó phân tích cú pháp phản hồi bằng ngôn ngữ mặc định. Vì vậy, làm cho bạn được chào đón sẽ không hoạt động. – EasyBB

+0

Tôi không thấy gì trong sửa đổi của bạn, ngăn cản cấu trúc sạch hơn. Tại một số điểm bạn có thể làm 'isset ($ lang [$ word])' và có thể dễ dàng lặp lại và sử dụng hàm 'array_search'. –

Trả lời

14

Bạn có thể sử dụng array_fill_keys():

$keys = array('thank you','thanks','thank ya'); 
$lang = array_fill_keys($keys, 'You are welcome'); 

Example

+2

Xin cảm ơn các bạn không biết! Tôi đánh giá cao nó, tôi vẫn đang học php vì vậy một số chức năng này là mới đối với tôi. – EasyBB

+0

@EasyBB: Rất vui được giúp bạn! – potashin

+0

Một câu hỏi mặc dù là có đảo ngược này? Bởi vì mảng của tôi là nhiều hơn chỉ là những cảm ơn bạn vv Tôi cần nó vì vậy tôi có thể làm 'array_fill_keys ($ nhờ, 'bạn được chào đón');' nhưng là nó có thể làm điều này ''cảm ơn' => array_fill_keys ($ nhờ , 'bạn được chào đón') '? hoặc một cái gì đó của loại đó ... – EasyBB

2

Trong khi tôi dè dặt đề nghị đưa ra một giải pháp mã khi bạn đã thừa nhận bạn chưa quen với ngôn ngữ và chưa nghiên cứu tốt, tôi hy vọng rằng dự án này là bạn đang chơi với ngôn ngữ để học nó như trái ngược với nhảy vào đầu để đưa cái gì đó cho một khách hàng mà cuối cùng nó sẽ không hoạt động tốt.

Chỉnh sửa: Chỉ cần nhìn thấy "điều tốt đẹp của bạn, tôi sẽ học đại học cho điều này" và tôi rất vui vì đã đăng để trợ giúp.

Đây là cấu trúc thực hiện những gì tôi tin rằng bạn đang tìm kiếm.

<?php 
class StandardizeSayings { 
    public static $CONVERSIONS = array(
    'You are welcome' => array(
     'thank you', 
     'thanks', 
     'thank ya' 
    ), 
    'Hello' => array('hello'), 
    'Goodbye' => array('goodbye', 'good bye') 
); 

    public static function getStandardization($word) { 
    $word_lowercase = strtolower($word); 
    foreach (StandardizeSayings::$CONVERSIONS as $conversion=>$equivalents) { 
     if (array_search($word_lowercase, $equivalents) !== false) { 
     return $conversion; 
     } 
    } 
    return ''; 
    } 
} 

echo StandardizeSayings::getStandardization('thank ya'); 
?> 

Nó sử dụng cấu trúc lớp với các thành viên/phương pháp tĩnh (vì vậy không cần khởi tạo lớp). Nó rất dễ dàng để mở rộng với một danh sách được xác định trước các chuyển đổi (công việc là cần thiết để thêm vào các chuyển đổi bổ sung trong thời gian chạy.) Nó cũng nên chạy khá nhanh.

0

tôi làm điều đó trong ba bước:

1 - Xác định giá trị duy nhất

2 - Điền giá trị lặp đi lặp lại

3 - Đoàn 1. và 2.

$lang = array(
    'hello'=>'hello', 
    'goodbye'=>'goodbye' 
); 

$keys = array('thank you','thanks','thank ya'); 
$result = array_fill_keys($keys, 'You are welcome'); 

$lang += $result; 

Có một xem array_fill_keysArray Operators +=

Các vấn đề liên quan