为了账号安全,请及时绑定邮箱和手机立即绑定

多维数组的多值搜索未在 PHP 中返回预期结果

多维数组的多值搜索未在 PHP 中返回预期结果

PHP
慕标琳琳 2022-12-23 10:09:06
我正在尝试构建一个允许搜索多维数组的函数,其中每个子数组都匹配多个条件。我遇到了一种奇怪的行为,无法弄清楚为什么会这样。以下是导致问题的一般逻辑。我在 PHP 7.4 上运行它是为了它的价值。最终的键数组 ( $keys2) 应该与第一个键数组( ) 匹配$keys,但它失去了与预期索引的关联。看来 PHP 忽略了我给定的 int 索引,array_keys()而是在最终调用中使用了未见过的 0 索引索引。$array = [    ['one' => 'aa', 'two' => 'qq'],    ['one' => 'bb', 'two' => 'qq'],    ['one' => 'aa', 'two' => 'qq'],    ['one' => 'bb', 'two' => 'qq'],    ['one' => 'aa', 'two' => 'qq'],];$keys = array_keys(array_column($array, 'one'), 'aa');$array2 = array_filter($array, static function($key) use ($keys) {    return in_array($key, $keys, true);}, ARRAY_FILTER_USE_KEY);$keys2 = array_keys(array_column($array2, 'two'), 'qq');echo '<pre>';var_dump($array, $keys, $array2, $keys2);echo '</pre>';以上输出:/var/www/test.php:array (size=5)  0 =>     array (size=2)      'one' => string 'aa' (length=2)      'two' => string 'qq' (length=2)  1 =>     array (size=2)      'one' => string 'bb' (length=2)      'two' => string 'qq' (length=2)  2 =>     array (size=2)      'one' => string 'aa' (length=2)      'two' => string 'qq' (length=2)  3 =>     array (size=2)      'one' => string 'bb' (length=2)      'two' => string 'qq' (length=2)  4 =>     array (size=2)      'one' => string 'aa' (length=2)      'two' => string 'qq' (length=2)/var/www/test.php:array (size=3)  0 => int 0  1 => int 2  2 => int 4/var/www/test.php:27:array (size=3)  0 =>     array (size=2)      'one' => string 'aa' (length=2)      'two' => string 'qq' (length=2)  2 =>     array (size=2)      'one' => string 'aa' (length=2)      'two' => string 'qq' (length=2)  4 =>     array (size=2)      'one' => string 'aa' (length=2)      'two' => string 'qq' (length=2)/var/www/test.php:array (size=3)  0 => int 0  1 => int 1  2 => int 2
查看完整描述

1 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

<?php 


$array = [

    ['one' => 'aa', 'two' => 'qq'],

    ['one' => 'bb', 'two' => 'qq'],

    ['one' => 'aa', 'two' => 'qq'],

    ['one' => 'bb', 'two' => 'qq'],

    ['one' => 'aa', 'two' => 'qq'],

];


$keys = array_keys(array_column($array, 'one'), 'aa');

$array2 = array_filter($array, static function($key) use ($keys) {

    return in_array($key, $keys, true);

}, ARRAY_FILTER_USE_KEY);


$keys2 = array_keys(array_combine(array_keys($array2), array_column($array2, 'two')), 'qq', true);


echo '<pre>';

var_dump($array, $keys, $array2, $keys2);

echo '</pre>';


查看完整回答
反对 回复 2022-12-23
  • 1 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号