【问题标题】:PHP Fastest way to check if a value in the array existsPHP 检查数组中的值是否存在的最快方法
【发布时间】:2017-04-16 05:30:36
【问题描述】:

我有这个数组:

array [▼
      0 => array:5 [▼
        "id" => 1
        "user_id" => 15
        "parent_campaign_id" => 69464
        "child_campaign_id" => 69464
        "cpm" => "1.00"
      ]
      1 => array:5 [▼
        "id" => 2
        "user_id" => 15
        "parent_campaign_id" => 69464
        "child_campaign_id" => 396331
        "cpm" => "2.00"
      ]
      2 => array:5 [▼
        "id" => 3
        "user_id" => 15
        "parent_campaign_id" => 69464
        "child_campaign_id" => 398032
        "cpm" => "3.00"
      ]
    ]

我如何知道该数组中是否存在数字396331,并且键应该是child_campaign_id

我尝试了in_array(),但它似乎无法正常工作,因为该数组的keys 不同。

我们将不胜感激。

【问题讨论】:

标签: php arrays


【解决方案1】:

简单干净的版本使用array_filter

$filtered = array_filter($original, function($element) {
    return $element['child_campaign_id'] === 396331;
});

if (count($filtered)) {
    // it exists
} else {
    // it doesn't
}

当然,如果您愿意,也可以使用变量作为搜索键:

$search = 396331; // or whatever
$filtered = array_filter($original, function($element) use ($search) {
    return $element['child_campaign_id'] === $search;
});

请注意,这样做的缺点是它会搜索整个数组,减少它,然后检查是否还有任何剩余。如果您有一个非常大的数组,一种更有效的方法是在到达第一个匹配的数组元素时循环遍历 break;

【讨论】:

  • 那里的$original 变量是什么?
  • @PinoyStackOverflower 你的数组。
  • @cale_b 当然支持变量:$fn = function($element) use ($id, $val) {return $element[$id] === $val;}; $filtered = array_filter($original, $fn); 它不支持的是 D > 2 的多维数组,但它超出了范围。
  • @cale_b 如果您想改进答案,这里有一个闪亮的大“编辑”按钮!但我已更新以考虑您的有用点。
【解决方案2】:

试试这个,它会打印数组索引,如果值不存在,它会给出错误的结果。

$index_array= array_search(396331, array_column($array, "child_campaign_id"));
var_dump($index_array);

DEMO

【讨论】:

  • 注意array_column的第三个参数也可以玩,这样就不用搜索数组了:isset(array_column($arr, 'id', 'child_campaign_id')[398032])(或者使用key_exists
猜你喜欢
  • 2022-06-06
  • 2023-03-17
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
相关资源
最近更新 更多