在手动生成的关联数组上进行数组搜索(不同的列名)

时间:2019-02-12 13:30:54

标签: php associative-array

让我们说我有一个像下面的数组

The min is -290390323 at index (21850, -9176672)
The max is 32595 at index (0, 0)

现在,我需要搜索键值“三”,并且我想返回的输出为1(数组索引)。如果不存在任何值,我想返回-1。

实际上是

  • 搜索值,如果存在则返回其索引。在我的情况下,索引为1
  • 这样我就可以得到$array = array( array( //index 0 'col_1' => 'one', 'col_2' => 'two' ), array( //index 1 'col_5' => 'five', 'col_3' => 'three' ) );

我找到了一个解决方案here,但是在我的情况下,列名称随时都将不同。

例如,

$array[1]['col_5']

在上面的代码中,我们需要指定列名,但是在我的数组中,列名是不同的。

3 个答案:

答案 0 :(得分:2)

function search($array){
for($i=0;$i<count($array);$i++){
    foreach($array[$i] as $key => $value){
    if($value=='three'){
        return $i;;
    }
  }
}

return -1;
}

答案 1 :(得分:1)

不确定要查找的是什么,但这是一些方法:

https://ideone.com/8S6445

$keys = array_map(
    function ($el) { 
        return array_search('three', $el) === false ? -1 : 1; 
    }, $array);

或者您可能想要类似的东西:

$keys = array_map(
    function ($el) {
        $idx = array_search('three', $el);
        return $idx === false ? -1 : $idx; 
    }, $array);

我希望最终我能达到您的目标:

$keys = array_map(
    function ($el) {
        $idx = array_search('three', $el);
        if ($idx === false) {
            return -1;
        } else {
            return array_search($idx, array_keys($el));
        }
    }, $array);

即使我了解您的目标,我也不认为您真的需要获取索引1而不是原始密钥col_3-在大多数情况下,col_3可能是您想要的用于以下计算,以及将false转换为-1的方式。所以我猜您需要的功能应该只是:

$keys = array_map(
  function ($el) {
    return array_search('three', $el); 
  }, $array);

当找到元素时,它将为关联数组返回真实的,否则返回 false

也许我还是没有实现你的目标?

更新:如果您只需要一个值,请直接这样做:

https://ideone.com/odTCxI

$key = -1;

foreach($array as $k => $el) {
    if (array_search('three', $el) !== false) {
        $key = $k;
        break;
    }
}
echo $key;

答案 2 :(得分:1)

您可以使用array_filter函数的自定义实现来执行此操作。但是,仅使用一个`foreach``循环同样有效。

示例

$array = [
    [
        '1' => 'one',
        '2' => 'two'
    ],
    [
        '1' => 'five',
        '2' => 'three',
    ],
];

// Set our search parameter
$needle = 'three';

$searchResult = current(array_filter(array_keys($array), function ($a) use ($array, $needle) {
    return array_search($needle, $array[$a]);
})) ?: -1;

// Output
var_dump($searchResult);