我需要搜索数组并希望返回结果,如下面提供的示例所示。
我知道我可以循环遍历数组,但我想知道是否有更好的方法来执行此操作,因为这将搜索大量数据。
搜索这样的数组:
// 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');
);
搜索数组,如果member_id
有任何等于NULL的键,则将其添加到结果数组中。
member_id
应该是新数组中数据集的关键。
密钥的数据不应该是值为NULL的密钥的全名,只是数字。
示例:field_id_1 => 1
。
// expected result
$result = array(
6 => array(5),
15 => array(1, 5),
);
提前致谢。
答案 0 :(得分:1)
虽然有更好的数组操作函数,但当需要进行密钥更改时,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);
}
}
}
}
答案 1 :(得分:1)
您可以在功能样式中执行部分操作,但PHP array_map
不允许您使用数组键,因此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);
答案 2 :(得分:-3)
我认为您可以使用array_search()和in_array()。
实际上你可以使用array_keys应该是正确的功能。 它应该返回与该值匹配的所有键,然后您可以轻松地遍历键以执行您需要的任何操作。
如果您有许多空值,这种方法可能不仅仅比循环遍历整个数据集更有效。