:返回数组中所有的键名。如果指定了一个搜索的值,可以过滤出包含该值的所有键。
<span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-variable">$search_value</span></span><span>, </span><span><span class="hljs-variable">$strict</span></span><span>);
</span></span>
array_values函数:返回数组中所有的值,忽略键名,重新索引。
<span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span></span>
假设我们有一个关联数组,存储了多个学生的成绩,其中数组的键是学生的名字,值是他们的成绩。我们希望找出成绩为某个特定分数的所有学生。
<span><span><span class="hljs-variable">$students</span></span><span> = [
</span><span><span class="hljs-string">'John'</span></span><span> => </span><span><span class="hljs-number">85</span></span><span>,
</span><span><span class="hljs-string">'Alice'</span></span><span> => </span><span><span class="hljs-number">90</span></span><span>,
</span><span><span class="hljs-string">'Bob'</span></span><span> => </span><span><span class="hljs-number">75</span></span><span>,
</span><span><span class="hljs-string">'Charlie'</span></span><span> => </span><span><span class="hljs-number">85</span></span><span>,
</span><span><span class="hljs-string">'David'</span></span><span> => </span><span><span class="hljs-number">95</span></span><span>
];
</span><span><span class="hljs-variable">$search_score</span></span><span> = </span><span><span class="hljs-number">85</span></span><span>;
</span><span><span class="hljs-comment">// 获取所有成绩为85的学生</span></span><span>
</span><span><span class="hljs-variable">$keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-variable">$search_score</span></span><span>);
</span><span><span class="hljs-variable">$students_with_score</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_intersect_key</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$keys</span></span><span>)));
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$students_with_score</span></span><span>);
</span></span>
输出:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => </span><span><span class="hljs-number">85</span></span><span>
[</span><span><span class="hljs-number">1</span></span><span>] => </span><span><span class="hljs-number">85</span></span><span>
)
</span></span>
组合使用array_keys和array_values可以实现很多实际的功能,尤其是当我们需要处理数组的值和键时。
假设我们有一个混合的关联数组,其中有些值可能重复,且我们希望将该数组的键提取出来,生成一个仅包含特定值的重建数组。
<span><span><span class="hljs-variable">$items</span></span><span> = [
</span><span><span class="hljs-string">'item1'</span></span><span> => </span><span><span class="hljs-string">'apple'</span></span><span>,
</span><span><span class="hljs-string">'item2'</span></span><span> => </span><span><span class="hljs-string">'orange'</span></span><span>,
</span><span><span class="hljs-string">'item3'</span></span><span> => </span><span><span class="hljs-string">'banana'</span></span><span>,
</span><span><span class="hljs-string">'item4'</span></span><span> => </span><span><span class="hljs-string">'apple'</span></span><span>,
</span><span><span class="hljs-string">'item5'</span></span><span> => </span><span><span class="hljs-string">'orange'</span></span><span>
];
</span><span><span class="hljs-variable">$filter_value</span></span><span> = </span><span><span class="hljs-string">'orange'</span></span><span>;
</span><span><span class="hljs-comment">// 获取包含"orange"的所有键</span></span><span>
</span><span><span class="hljs-variable">$keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$items</span></span><span>, </span><span><span class="hljs-variable">$filter_value</span></span><span>);
</span><span><span class="hljs-comment">// 使用array_values获取这些键对应的值</span></span><span>
</span><span><span class="hljs-variable">$filtered_values</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_intersect_key</span></span><span>(</span><span><span class="hljs-variable">$items</span></span><span>, </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$keys</span></span><span>)));
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$filtered_values</span></span><span>);
</span></span>
输出:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => orange
[</span><span><span class="hljs-number">1</span></span><span>] => orange
)
</span></span>
如果你有一个多维数组,你可能需要找出满足某个条件的数组元素的值。通过组合array_keys和array_values,我们可以通过某个特定的条件过滤出结果。
<span><span><span class="hljs-variable">$products</span></span><span> = [
</span><span><span class="hljs-string">'P001'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Laptop'</span></span><span>, </span><span><span class="hljs-string">'price'</span></span><span> => </span><span><span class="hljs-number">800</span></span><span>],
</span><span><span class="hljs-string">'P002'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Phone'</span></span><span>, </span><span><span class="hljs-string">'price'</span></span><span> => </span><span><span class="hljs-number">400</span></span><span>],
</span><span><span class="hljs-string">'P003'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Tablet'</span></span><span>, </span><span><span class="hljs-string">'price'</span></span><span> => </span><span><span class="hljs-number">300</span></span><span>],
</span><span><span class="hljs-string">'P004'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Monitor'</span></span><span>, </span><span><span class="hljs-string">'price'</span></span><span> => </span><span><span class="hljs-number">600</span></span><span>],
];
</span><span><span class="hljs-variable">$target_price</span></span><span> = </span><span><span class="hljs-number">400</span></span><span>;
</span><span><span class="hljs-comment">// 获取所有价格等于400的商品</span></span><span>
</span><span><span class="hljs-variable">$product_keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_column</span></span><span>(</span><span><span class="hljs-variable">$products</span></span><span>, </span><span><span class="hljs-string">'price'</span></span><span>), </span><span><span class="hljs-variable">$target_price</span></span><span>);
</span><span><span class="hljs-comment">// 获取这些商品的详细信息</span></span><span>
</span><span><span class="hljs-variable">$target_products</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_intersect_key</span></span><span>(</span><span><span class="hljs-variable">$products</span></span><span>, </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$product_keys</span></span><span>)));
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$target_products</span></span><span>);
</span></span>
输出:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[name] => Phone
[price] => </span><span><span class="hljs-number">400</span></span><span>
)
)
</span></span>
array_values和array_keys这两个函数可以组合使用来完成一些复杂的数组操作。通过合理搭配这两个函数,可以帮助我们快速查找、过滤和重构数组。这在实际开发中尤为重要,特别是在处理多维数组、过滤数组中的特定值或键时,能大大提高代码的可读性和效率。
掌握了这两个函数的组合使用,可以让我们更灵活地处理数组数据,提高开发效率。
相关标签:
array_values array_keys