代码之家  ›  专栏  ›  技术社区  ›  qadenza

获取另一个已知元素的数组元素?

  •  0
  • qadenza  · 技术社区  · 6 年前
    Array
    (
        [0] => Array
            (
                [what] => b4
                [map] => 74,76,77,83
            )
    
        [1] => Array
            (
                [what] => b2
                [map] => 53,82
            )
    
        [2] => Array
            (
                [what] => b1
                [map] => 36
            )
     )
    
    abc('b4');
    
    function abc($what){
        $map = // element `map` where `what` = $what;
    }
    

    所以我需要 map 哪里 what 等于 $what ;

    例如-if 什么? b4 结果应该是 74,76,77,83 等等。

    我该怎么做?

    6 回复  |  直到 6 年前
        1
  •  3
  •   Jeff    6 年前

    array_search() array_column() 你可以找到匹配的 $map 在一行中:

    <?php
    
    $array = Array
    (
        Array
            (
                "what" => "b4",
                "map" => "74,76,77,83"
            ),
       Array
            (
                "what" => "b2",
                "map" => "53,82"
            ),
        Array
            (
                "what" => "b1",
                "map" => "36"
            )
     );
    
    function abc($array, $what) {
       return $array[array_search($what, array_column($array, 'what'))]['map'];
    }   
    
    echo abc($array, "b4");
    

    函数的构造和解释如下:

    function abc($array /* the complete input array */, $what /* the search string */) {
       // get the key of the sub-array that has $what in column 'what':
       $key = array_search($what, array_column($array, 'what'));
       // use that key to get 'map' on index $key
       return $array[$key]['map'];
    }
    

    在这里可以找到一把工作的小提琴: https://3v4l.org/0NpcX

        2
  •  4
  •   Nigel Ren    6 年前

    如果要定期访问数据, what 是唯一的,然后使用 array_column() 以第三个参数作为要用作键的列。然后您的阵列就可以轻松访问 什么 在这个答案中没有回路受到伤害…

    $array = Array
    (
        Array
        (
            "what" => "b4",
            "map" => "74,76,77,83"
            ),
        Array
        (
            "what" => "b2",
            "map" => "53,82"
            ),
        Array
        (
            "what" => "b1",
            "map" => "36"
            )
        );
    
    $array = array_column($array, null, "what");
    
    echo $array['b4']['map'];
    

    给予。。。

    74,76,77,83
    
        3
  •  2
  •   arkascha    6 年前

    我认为在数组中“行走”很容易阅读和理解:

    <?php
    $map = [
        [
            'what' => "b4",
            'map' => "74,76,77,83"
        ],
        [
                'what' => "b2",
                'map' => "53,82"
        ],
        [
                'what' => "b1",
                'map' => "36"
        ]
    ];
    
    function lookupWhatInMap(&$map, $what) {
        array_walk($map, function($entry, $key) use ($what) {
            if ($entry['what'] == $what) {
                print_r($entry['map']);
            }
        });
    }
    
    lookupWhatInMap($map, "b4");
    
        4
  •  1
  •   Ibu    6 年前

    你所要做的就是循环浏览你的地图并比较数值。

    function abc($what){
        $map = [...];
        foreach($map as $item) {
            if (isset($item[$what]) ) {
                return $item["map"];
            }
        }
        return false;
    }
    
        5
  •  1
  •   The fourth bird    6 年前

    如果只需要数组中的1个值,则可以使用foreach和返回语句,其中存在匹配项:

    $a = [
        [
            "what" => "b4",
            "map" => "74,76,77,83"
        ],
        [
            "what" => "b2",
            "map" => "53,82"
        ],
        [
            "what" => "b1",
            "map" => "36"
        ]
    ];
    function abc($what, $arrays)
    {
        foreach ($arrays as $array) {
            if ($array['what'] === $what) {
                return $array['map'];
            }
        }
        return false;
    }
    
    echo(abc('b4', $a)); // 74,76,77,83
    

    Demo

        6
  •  0
  •   Alex    6 年前

    https://ideone.com/V9WNNx

    $arr[] = [
                'what' => 'b4',
                'map' => '74,76,77,83'
            ];
    $arr[] = [
                'what' => 'b2',
                'map' => '53,82'
            ];
    $arr[] = [
                'what' => 'b1',
                'map' => '36'
            ];
    
    echo abc('b4', $arr);
    
    function abc($what, $arr){
        $map = null;
        $idx = array_search($what, array_column($arr, 'what'));
        if ($idx !== false) {
            $map = $arr[$idx]['map'];
        }
        return $map;
    }
    
    推荐文章