在尝试转换多个对象并将它们放入一个数组时,我很遗憾地得到了一个数组中的数组结果。
我想要转换的对象:
def __init__(self, startUrls, *args, **kwargs):
self.keywords = ['sales','advertise','contact','about','policy','terms','feedback','support','faq']
self.startUrls = startUrls
self.startUrls = json.loads(self.startUrls)
super(MySpider, self).__init__(*args, **kwargs)
def start_requests(self):
for url in self.startUrls:
yield Request(url=url)
我的PHP:
array(2) {
[0]=>
object(stdClass)#104 (1) {
["name"]=>
string(4) "Paul"
}
[1]=>
object(stdClass)#105 (1) {
["name"]=>
string(5) "Jenna"
}
}
输出:
for ($i=0; $i < count($readers) ; $i++) {
$json = json_encode($readers[$i]); // 1
$data = json_decode($json, TRUE); // 2
$arr = array();
array_push($arr, $data); // 3
}
-
// 1
{"name":"Paul"}{"name":"Jenna"}
-
// 2
Array
(
[name] => Paul
)
Array
(
[name] => Jenna
)
期望的结果
我想将所有内容合并到一个数组中。关键是索引,值是名称。
// 3
Array
(
[0] => Array
(
[name] => Paul
)
)
Array
(
[0] => Array
(
[name] => Jenna
)
)
答案 0 :(得分:1)
循环遍历对象数组($arr
)并使用$finArr
值编译最终数组($val->string
)。试试这个:
$finArr = array();
foreach ($arr as $key => $val) {
$finArr[] = $val->string;
}
答案 1 :(得分:1)
您还必须从数组中提取键。并在foreach之外声明$arr = array()
$arr = array();
for ($i=0; $i < count($readers) ; $i++) {
$data = $readers[$i]->name; //change this line
array_push($arr, $data); // 3
}
print_r($arr);
另一种方法是你可以简单地使用array_column()
$arr = array_column($readers,"name");
print_r($arr);
答案 2 :(得分:1)
您可以简单地遍历读者数组,提取每个读者的名称,并根据需要将每个名称添加到数字索引数组中。
$names = array(); // Initialize.
foreach($readers as $reader) {
if (!empty($reader->name)) {
$names[] = $reader->name;
}
}
print_r($names); // To see what you've got.
Array
(
[0] => Paul
[1] => Jenna
)