Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取另一个元素已知的数组元素?_Php_Arrays - Fatal编程技术网

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

Php 获取另一个元素已知的数组元素?,php,arrays,Php,Arrays,所以我需要得到什么等于$what的地图 例如,如果$b4的结果应该是74,76,77,83;等等 我该怎么做呢?您所要做的就是在地图中循环并比较值 Array ( [0] => Array ( [what] => b4 [map] => 74,76,77,83 ) [1] => Array ( [what] => b2

所以我需要得到什么等于$what的地图

例如,如果$b4的结果应该是74,76,77,83;等等


我该怎么做呢?

您所要做的就是在地图中循环并比较值

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:

function abc($what){
    $map = [...];
    foreach($map as $item) {
        if (isset($item[$what]) ) {
            return $item["map"];
        }
    }
    return false;
}

可以在此处找到一个可用的fiddle:

如果您只需要数组中的1个值,可以在匹配的地方使用foreach和return语句:

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'];
}

我认为遍历数组很容易阅读和理解:

$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;
}

如果要定期访问数据和what is unique,请使用带有第三个参数的array_列作为要用作键的列。那么,您的阵列就可以轻松访问,并且在这个答案中不会损坏任何循环

<?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");

$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'];

到目前为止,您尝试了什么?在函数abc'$What'@NigelRen中不应该有引号,谢谢,对了。@dev null resident long story short-我从数据库中获取这个数组,并且尽量避免经常查询数据库。为什么不使用循环并将数组作为参数传递呢?在这个答案中,upvote for和no loops都是有害的-无论如何,这是一个聪明的解决方案!Null表示返回与所选内容相关的相同数组。只要运行代码和var_dump$array,您就会看到。在第二个参数中使用null意味着保持整个元素的原样。请尝试打印\u r$数组以查看results@Jeff我很确定在后台有一个循环。Php是一个循环,你认为它是如何执行任何代码的。这是我看到的唯一可以找到多个项目的答案。如果我理解正确,则返回或覆盖所有其他内容。@Andreas可能是,但这不是问题中提到的明确要求。。所有其他答案都可以很容易地修改,以在结果数组中收集匹配项…我知道。我只是想告诉任何一个将来看到答案的人。
<?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");
$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