【问题标题】:How can I access values of an array through a sanitized key in php?如何通过 php 中的清理键访问数组的值?
【发布时间】:2021-05-31 23:38:33
【问题描述】:

假设我有一个像这样的关联数组:

PHP

   $array = array(
       'Corfù' => 'pita gyros',
       'San Gennaro'  => 'pizza',
       'Perù' => 'tortillias'
   );

我怎样才能像这样通过 php 中的净化键访问这个数组的值? (可能没有循环)

PHP

echo $array['corfu'];
// pita gyros

echo $array['san-gennaro'];
// pizza

而不是这个

PHP

echo $array['Corfù'];
// pita gyros

这是因为我从相关页面的 url 中获取密钥,显然缺少重音和空格

【问题讨论】:

  • 如果没有循环或隐式循环,您将无法执行此操作。使用循环相对容易。
  • 为什么你的数组键是这样开始的?您是否打算在某个时候将它们用于前端的最终用户的输出?如果不是,那可能更有意义,因为您使用的键实际上与您从外部传递的值相匹配。
  • @CBroe 是的,我需要将密钥从后端传递到前端,这是为了填充页面的标题和一些表格,所以我需要呈现正确的单词。也许我可以使用 corfu 之类的键,并在里面添加一个附加值,例如 "render" => "Corfù",但我认为这有点烦人。
  • “但我认为这有点烦人” - 不,这才是你应该这样做的方式。将实际的逻辑与你需要的东西分开来显示。否则,当前端需要显示的内容在某些时候发生变化时,或者当您可能想要添加第二种语言时,您将遇到更大的麻烦。

标签: php arrays sanitization associative


【解决方案1】:
function seola($s)
{
    $tr = array('ş', 'Ş', 'ı', 'İ', 'ğ', 'Ğ', 'ü', 'Ü', 'ö', 'Ö', 'Ç', 'ç','ù');
    $eng = array('s', 's', 'i', 'i', 'g', 'g', 'u', 'u', 'o', 'o', 'c', 'c', 'y','u');
    $s = str_replace($tr, $eng, $s);
    $s = strtolower($s);
    $s = preg_replace('/&.+?;/', '', $s);
    $s = preg_replace('/[^%a-z0-9 \/_-]/', '', $s);
    $s = preg_replace('/\s+/', '-', $s);
    $s = preg_replace('|-+|', '-', $s);
    $s = trim($s, '-');
    $s = substr($s, 0, 60);
    return $s;
}

  $array = array(
            'Corfù' => 'pita gyros',
            'San Gennaro' => 'pizza',
            'Perù' => 'tortillias'
        );

       foreach ($array as $key=>$value){
           $array[seola($key)] = $array[$key];
           unset($array[$key]);
       }
print_r($array);
/*
Array
(
    [corfu] => pita gyros
    [san-gennaro] => pizza
    [peru] => tortillias
)
*/

它看起来更有用 //

【讨论】:

  • 您好 Berkan Kaya,您能解释一下您的代码以及它是如何解决问题的吗?
  • 不幸的是:(如果有另一种我不知道的方法,请继续研究。顺便说一句,你为什么不使用循环@silvered.dragon
  • 没什么好解释的。我只是使用 seola 功能编辑键以获得更有用的功能。 @bsheps
  • @silvered.dragon 是的一点点 :( 对不起。但现在看来只有这个解决方案才能解决这个问题
  • @silvered.dragon 但是如果你也想嵌套数组,我会添加到解决方案中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 2011-06-19
  • 2013-05-02
  • 2017-09-02
相关资源
最近更新 更多