我有以下代码,但我想知道如何才能提高效率。
if ($genres){
$arr = array();
foreach ($genres as $i) {
$arr[] = $i->name;
}
$genres_arr = $arr;
}
if ($themes){
$arr = array();
foreach ($themes as $i) {
$arr[] = $i->name;
}
$themes_arr = $arr;
}
var_dump($genres_arr);
var_dump($themes_arr);
我已经尝试将它们放入if语句中,但因为它们始终只存在于第一个运行中。我想检查两者是否存在并始终通过foreach循环运行它们。如果只存在一个,我只想运行一个。
这些是数组结构。
["genres"]=>
array(1) {
[0]=>
object(stdClass)#1579 (2) {
["id"]=>
int(25)
["name"]=>
string(26) "Hack and slash/Beat 'em up"
}
}
["themes"]=>
array(3) {
[0]=>
object(stdClass)#1576 (2) {
["id"]=>
int(1)
["name"]=>
string(6) "Action"
}
}
我想让他们像在对象里面那样受宠若惊。然后我将它们内爆到WordPress使用的列表中。
此代码有效,但重复性和一些帮助会很棒!
答案 0 :(得分:3)
我认为你可以使用array column
,因为它可以像"A multi-dimensional array or an array of objects from which to pull a column of values from"这样读取值:
if ($genres) {
$genres_arr = array_column($genres, 'name');
}
if ($themes) {
$themes_arr = array_column($themes, 'name');
}
var_dump($genres_arr);
var_dump($themes_arr);
答案 1 :(得分:0)
通过这种方式,最简单的简化是引入一个新函数,构建数组。
function getNames($arr) {
if (!is_array($arra)) return false;
return array_map(function($item) {
return $item->name;
}, $arr);
}
$themes_arr = getNames($themes);
$genre_arr = getNames($genres);
答案 2 :(得分:0)
这就是我将它们结合起来的方式
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
-files gs://bucket-name/intro_to_mapreduce/mapper_prod_cat.py,gs://bucket-name/intro_to_mapreduce/reducer_prod_cat.py \
-mapper mapper_prod_cat.py \
-reducer reducer_prod_cat.py \
-input gs://bucket-name/intro_to_mapreduce/purchases.txt \
-output gs://bucket-name/intro_to_mapreduce/output_prod_cat
答案 3 :(得分:0)
claudio 的答案非常适合这种情况,但在更一般的情况下,您还可以定义一个映射函数,然后将其与array_map
一起用于两个集合对象,例如
$mapper = function ($item) { return $item->name; };
$genres_arr = array_map($mapper, $genres);
$themes_arr = array_map($mapper, $themes);
如果您将来需要它,它的优点是能够运行更复杂的逻辑(使用getter函数而不是直接属性访问等)。
理想情况下,两个对象都会实现一个公共接口,因此很清楚地确定了映射函数的设计对象类型。