Php 搜索数组并使用结果创建新数组
我需要搜索一个数组,并希望像下面提供的示例一样返回结果 我知道我可以在数组中循环,但我想看看是否有更好的方法来实现这一点,因为这将是搜索大量数据 在如下数组中搜索:Php 搜索数组并使用结果创建新数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我需要搜索一个数组,并希望像下面提供的示例一样返回结果 我知道我可以在数组中循环,但我想看看是否有更好的方法来实现这一点,因为这将是搜索大量数据 在如下数组中搜索: // initial array $search_thru = array( array('member_id' => 6, 'field_id_1' => 'some data', 'field_id_5' => NULL), array('member_id' => 15, 'field_
// initial array
$search_thru = array(
array('member_id' => 6, 'field_id_1' => 'some data', 'field_id_5' => NULL),
array('member_id' => 15, 'field_id_1' => NULL, 'field_id_5' => NULL),
array('member_id' => 21, 'field_id_1' => 'this field too', 'field_id_5' => 'this field has some data');
);
在数组中搜索,如果成员的id
有任何键等于NULL,则将其添加到结果数组中
成员id
应该是新数组中数据集的键。
键的数据不应该是值为NULL的键的全名,而应该是数字
示例:field\u id\u 1=>1
// expected result
$result = array(
6 => array(5),
15 => array(1, 5),
);
提前谢谢。我想有,您可以使用
实际上你可以使用应该是正确的函数。
它应该返回与该值匹配的所有键,然后您可以轻松地循环通过这些键来执行所需的任何操作
尽管这种方法可能并不比在整个数据集中循环(如果有许多空值)更有效。虽然有更好的数组操作函数,但在需要更改键时,
foreach
循环似乎是一种简单的方法:
<?php
$haystack = array(
array('member_id' => 6, 'field_id_1' => 'some data', 'field_id_5' => NULL),
array('member_id' => 15, 'field_id_1' => NULL, 'field_id_5' => NULL),
array('member_id' => 21, 'field_id_1' => 'this field too', 'field_id_5' => 'this field has some data'),
);
$result = array();
foreach($haystack as $row) {
if(in_array(null, $row)) {
$result[$row['member_id']] = array();
foreach($row as $key => $value) {
if($value === null) {
$result[$row['member_id']][] = str_replace('field_id_', '', $key);
}
}
}
}
您可以以函数式的方式完成部分操作,但是PHP的数组映射
不允许您使用数组键,因此foreach
似乎是输出所需格式的最直接的方法:
<?php
function strip_prefix( $string ) {
$prefix = 'field_id_';
return explode( $prefix, $string )[1];
}
function get_null_fields( $member ) {
$null_keys = array_keys( $member, NULL, true ); // get all keys with NULL values
return array_map( 'strip_prefix', $null_keys );
}
// initial array
$search_thru = array(
array('member_id' => 6, 'field_id_1' => 'some data', 'field_id_5' => NULL),
array('member_id' => 15, 'field_id_1' => NULL, 'field_id_5' => NULL),
array('member_id' => 21, 'field_id_1' => 'this field too', 'field_id_5' => 'this field has some data')
);
$tmp = array();
foreach ( $search_thru as $member ) {
$tmp[ $member['member_id'] ] = get_null_fields($member);
}
$result = array_filter( $tmp, 'count' ); // remove items with no null fields
print_r($result);
您尝试过什么吗?Foreach循环非常容易编写。您可以根据您的个人需要对其进行大量定制。运行时为O(n)。所以,我看不出有什么理由不在foreach循环中点击每个索引,并在运行时附加到结果数组中。这似乎是一个合乎逻辑的起点