【问题标题】:Extract pair key value on multidimensional array在多维数组上提取对键值
【发布时间】:2017-08-25 21:09:46
【问题描述】:

我使用此代码在多维数组上搜索一对值和键

当 lang 为 "en" 时我需要提取 pair 的值

它对我有用,但我认为它不是 PHP 7 的好代码

$arr = [['lang' => null, 'title' => 'Main kaff'],
['lang' => 'en', 'title' => 'May way'],
['lang' => 'es', 'title' => 'Mi camino'],
['lang' => 'fr', 'title' => 'Mon chaimin']];

$key = "lang";

function multiSearch(array $array, array $pairs)
{
    $found = array();
    foreach ($array as $aKey => $aVal) {
        $coincidences = 0;
        foreach ($pairs as $pKey => $pVal) {
            if (array_key_exists($pKey, $aVal) && $aVal[$pKey] == $pVal) {
                $coincidences++;
            }
        }

        if ($coincidences == count($pairs)) {
            $found[$aKey] = $aVal;
        }
    }

    return $found;
} 

$x = multiSearch($arr,  array('lang' => 'en'));

var_dump($x);

结果正确

array(1) {
  [1]=>
  array(2) {
    ["lang"]=>
    string(2) "en"
    ["title"]=>
    string(7) "May way"
  }
}

【问题讨论】:

  • 这个问题可能更适合Code Review SE。
  • 如果你像这样构造数组会容易得多:$arr['lang']['en']['title'] = 'May way';
  • @ZachGates 哎呀,我不知道这个地方。是否可以移动问题?
  • 有可能,但我没有足够高的声誉来做这件事。希望高级用户或版主可以为您做到这一点。

标签: php arrays multidimensional-array php-7


【解决方案1】:

最简化的方式:-

<?php

$arr = [['lang' => null, 'title' => 'Main kaff'],
['lang' => 'en', 'title' => 'May way'],
['lang' => 'es', 'title' => 'Mi camino'],
['lang' => 'fr', 'title' => 'Mon chaimin']];

$lang= "en";

function multiSearch($arr,$lang)
{ 
   return $arr[array_search($lang,array_column($arr,'lang'))];  
}
$x = multiSearch($arr, $lang);
print_r($x);

输出:- https://eval.in/850435

了解正在发生的事情的详细方法:-

<?php

$arr = [['lang' => null, 'title' => 'Main kaff'],
['lang' => 'en', 'title' => 'May way'],
['lang' => 'es', 'title' => 'Mi camino'],
['lang' => 'fr', 'title' => 'Mon chaimin']];

$lang= "en";// language you want to search

function multiSearch($arr,$lang)
{ 

   $array = array_column($arr,'lang'); // get lang-key all values as a single dimensional array from original multidimensional array
   $key = array_search($lang,$array); // get key based on search-language-match from this single dimensional array

    return $arr[$key]; // based on key return sub-array from original multi-dimensional array
} 

$x = multiSearch($arr, $lang);// call function with original array and language you want to search

print_r($x); // print output

输出:- https://eval.in/850427

【讨论】:

    【解决方案2】:

    重新排列您的数据,一切都变得如此简单:

    $arrTitle = [
        null => 'Main kaff',
        'en' => 'May way',
        'es' => 'Mi camino',
        'fr' => 'Mon chaimin'
    ];
    
    echo $arrTitle[null] . "\n";
    echo $arrTitle['en'] . "\n";
    

    结果:
    主卡夫
    五月路

    【讨论】:

    • 质疑这与数据无关。数据它是一个存在的数据,而不是修改。问题是关于如何使用这个数据模型。
    猜你喜欢
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2020-06-05
    相关资源
    最近更新 更多