如果查找数据中存在匹配键,则仅在新数组中添加 "key/value"
Only add "key/value" in new array if matching key exists in lookup data
我正在通过创建一个新数组来重构一个数组。
新数组的目的是扁平化代码,也只是
添加具有 $array['lookup'].
中键的键值对
问题:
我如何确保 for 循环只创建键值对,
与 $array['lookup'] ?
中的键值一起列出
<?php
// Data
$array = [
'identification_posts' => [
[
"#COMPANY",
"Ford"
],
[
"#SOFTWARE",
"1.2"
],
[
"#id",
"237"
],
],
'lookup' => [
'#COMPANY',
'#SOFTWARE',
]
];
// Logics
print_r($array);
$newArray = [];
for ($i=0; $i < count($array['identification_posts']) ; $i++) {
$newArray['identification_posts'][$array['identification_posts'][$i][0]] =
$array['identification_posts'][$i][1];
}
print_r($newArray);
结果
Array
(
[identification_posts] => Array
(
[#COMPANY] => Ford
[#SOFTWARE] => 1.2
[#id] => 237
)
)
想要的结果
(不包括键值对 [id],因为它在 $array['lookup']
中丢失
Array
(
[identification_posts] => Array
(
[#COMPANY] => Ford
[#SOFTWARE] => 1.2
)
)
<?php
// Data
$array = [
'identification_posts' => [
[
"#COMPANY",
"Ford"
],
[
"#SOFTWARE",
"1.2"
],
[
"#id",
"237"
],
],
'lookup' => [
'#COMPANY',
'#SOFTWARE',
]
];
// Logics
echo '<pre>';
print_r($array);
$lookup = array_flip($array['lookup']);
for ($i = 0; $i < count($array['identification_posts']); $i++) {
if (isset($lookup[$array['identification_posts'][$i][0]]))
$newArray['identification_posts'][$array['identification_posts'][$i][0]] =
$array['identification_posts'][$i][1];
}
print_r($newArray);
您可以检查索引是否为in_array
$newArray = [];
$count = count($array['identification_posts']);
for ($i = 0; $i < $count; $i++) {
$key = $array['identification_posts'][$i][0];
$value = $array['identification_posts'][$i][1];
if ( in_array($key, $array['lookup']) ){
$newArray['identification_posts'][$key] = $value;
}
}
print_r($newArray);
正如所指出的,检查该值是否存在于查找数组中。我还更改了循环以使用 foreach()
因为它缩短了很多数组查找以使代码更具可读性(恕我直言)...
$newArray = [];
foreach ( $array['identification_posts'] as $entry ){
if ( in_array($entry[0], $array['lookup']) !== false ) {
$newArray['identification_posts'][$entry[0]] = $entry[1];
}
}
print_r($newArray);
也许您应该使用 in_array 来检查 value[0]
在 lookup
中
$lookup = $array['lookup'];
$newArray = ['identification_posts' => []];
foreach ($array['identification_posts'] as $value) {
if (in_array($value[0], $lookup)) {
$newArray['identification_posts'][$value[0]] = $value[1];
}
}
// var_dump($newArray);
我正在通过创建一个新数组来重构一个数组。 新数组的目的是扁平化代码,也只是 添加具有 $array['lookup'].
中键的键值对问题:
我如何确保 for 循环只创建键值对, 与 $array['lookup'] ?
中的键值一起列出<?php
// Data
$array = [
'identification_posts' => [
[
"#COMPANY",
"Ford"
],
[
"#SOFTWARE",
"1.2"
],
[
"#id",
"237"
],
],
'lookup' => [
'#COMPANY',
'#SOFTWARE',
]
];
// Logics
print_r($array);
$newArray = [];
for ($i=0; $i < count($array['identification_posts']) ; $i++) {
$newArray['identification_posts'][$array['identification_posts'][$i][0]] =
$array['identification_posts'][$i][1];
}
print_r($newArray);
结果
Array
(
[identification_posts] => Array
(
[#COMPANY] => Ford
[#SOFTWARE] => 1.2
[#id] => 237
)
)
想要的结果 (不包括键值对 [id],因为它在 $array['lookup']
中丢失Array
(
[identification_posts] => Array
(
[#COMPANY] => Ford
[#SOFTWARE] => 1.2
)
)
<?php
// Data
$array = [
'identification_posts' => [
[
"#COMPANY",
"Ford"
],
[
"#SOFTWARE",
"1.2"
],
[
"#id",
"237"
],
],
'lookup' => [
'#COMPANY',
'#SOFTWARE',
]
];
// Logics
echo '<pre>';
print_r($array);
$lookup = array_flip($array['lookup']);
for ($i = 0; $i < count($array['identification_posts']); $i++) {
if (isset($lookup[$array['identification_posts'][$i][0]]))
$newArray['identification_posts'][$array['identification_posts'][$i][0]] =
$array['identification_posts'][$i][1];
}
print_r($newArray);
您可以检查索引是否为in_array
$newArray = [];
$count = count($array['identification_posts']);
for ($i = 0; $i < $count; $i++) {
$key = $array['identification_posts'][$i][0];
$value = $array['identification_posts'][$i][1];
if ( in_array($key, $array['lookup']) ){
$newArray['identification_posts'][$key] = $value;
}
}
print_r($newArray);
正如所指出的,检查该值是否存在于查找数组中。我还更改了循环以使用 foreach()
因为它缩短了很多数组查找以使代码更具可读性(恕我直言)...
$newArray = [];
foreach ( $array['identification_posts'] as $entry ){
if ( in_array($entry[0], $array['lookup']) !== false ) {
$newArray['identification_posts'][$entry[0]] = $entry[1];
}
}
print_r($newArray);
也许您应该使用 in_array 来检查 value[0]
在 lookup
$lookup = $array['lookup'];
$newArray = ['identification_posts' => []];
foreach ($array['identification_posts'] as $value) {
if (in_array($value[0], $lookup)) {
$newArray['identification_posts'][$value[0]] = $value[1];
}
}
// var_dump($newArray);