ich eine Funktion erstellen möchten zurückzukehren, die unter einem großen Array sucht und gibt einige Felder, ist die Anordnung zum Beispiel wie folgt aus (var_dump
der großen Array):Wie ein Sub-Array über array_filter
array(3) {
[0]=>
array(5) {
["group_id"]=>
int(87)
["group_name"]=>
string(28) "General Specifictaions"
["group_slug"]=>
string(80) "%da%af%d8%b2%db%8c%d9%86%d9%87-%d9%87%d8%a7%db%8c-%d8%b9%d9%85%d9%88%d9%85%db%8c"
["group_desc"]=>
string(0) ""
["attributes"]=>
array(4) {
[0]=>
array(5) {
["attr_id"]=>
int(95)
["attr_name"]=>
string(23) "Release date"
["attr_slug"]=>
string(67) "%d8%aa%d8%a7%d8%b1%db%8c%d8%ae-%d8%a7%d9%86%d8%aa%d8%b4%d8%a7%d8%b1"
["attr_desc"]=>
string(0) ""
["value"]=>
string(3) "144"
}
[1]=>
array(5) {
["attr_id"]=>
int(96)
["attr_name"]=>
string(21) "Availability"
["attr_slug"]=>
string(5) "stock"
["attr_desc"]=>
string(0) ""
["value"]=>
string(7) "instock"
}
}
}
[1]=>
array(5) {
["group_id"]=>
int(89)
["group_name"]=>
string(19) "Display"
["group_slug"]=>
string(55) "%d8%b5%d9%81%d8%ad%d9%87-%d9%86%d9%85%d8%a7%db%8c%d8%b4"
["group_desc"]=>
string(0) ""
["attributes"]=>
array(0) {
}
}
}
Dieses Array ist die Liste aller Spezifikationen eines Produkts, was ich tun möchte, ist nach einem bestimmten Attribut in attributes
Abschnitt suchen und nur dieses Attribut zurückgeben, und diese Suche kann durch attr_id
oder oder attr_slug
, so dass ich erstellt diese Funktion, die array_filter
verwendet, aber ich kann nicht das Teil, das ich will:
function dw_attr_value_by($post_id = '', $field, $value) {
if(!$post_id){
global $post;
$post_id = $post->ID;
}
if(!$post_id) return;
$table = dw_get_table_result($post_id); // The large array
return array_filter($table, function($v, $k) use($field, $value){
$attributes = $v['attributes'];
if(sizeof($attributes) == 0) return;
for($i = 0; $i < sizeof($attributes); $i++) {
if($field == 'id') {
if($attributes[$i]['attr_id'] == $value) break;
} elseif($field == 'slug'){
if($attributes[$i]['attr_slug'] == rawurlencode($value)) break;
} elseif($field == 'name'){
if($attributes[$i]['attr_name'] == $value) break;
}
}
return $attributes[$i];
}, ARRAY_FILTER_USE_BOTH);
}
Es macht die Array-Filter, aber es das Teil nicht zurückkommt ich will, zum Beispiel i das Ergebnis will wie var_dump(dw_attr_value_by($post->ID, 'id', 144)
sein:
array(5) {
["attr_id"]=>
int(95)
["attr_name"]=>
string(23) "Release date"
["attr_slug"]=>
string(67) "%d8%aa%d8%a7%d8%b1%db%8c%d8%ae-%d8%a7%d9%86%d8%aa%d8%b4%d8%a7%d8%b1"
["attr_desc"]=>
string(0) ""
["value"]=>
string(3) "144"
}
JSON-Format der großen Array
[{"group_id":87,"group_name":"\u06af\u0632\u06cc\u0646\u0647 \u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc","group_slug":"%da%af%d8%b2%db%8c%d9%86%d9%87-%d9%87%d8%a7%db%8c-%d8%b9%d9%85%d9%88%d9%85%db%8c","group_desc":"","attributes":[{"attr_id":95,"attr_name":"\u062a\u0627\u0631\u06cc\u062e \u0627\u0646\u062a\u0634\u0627\u0631","attr_slug":"%d8%aa%d8%a7%d8%b1%db%8c%d8%ae-%d8%a7%d9%86%d8%aa%d8%b4%d8%a7%d8%b1","attr_desc":"","value":"144"},{"attr_id":96,"attr_name":"\u0648\u0636\u0639\u06cc\u062a \u0628\u0627\u0632\u0627\u0631","attr_slug":"stock","attr_desc":"","value":"instock"},{"attr_id":99,"attr_name":"\u0628\u0644\u0648\u062a\u0648\u062b","attr_slug":"%d8%a8%d9%84%d9%88%d8%aa%d9%88%d8%ab","attr_desc":"","value":"yes"},{"attr_id":100,"attr_name":"\u0648\u0627\u06cc \u0641\u0627\u06cc","attr_slug":"%d9%88%d8%a7%db%8c-%d9%81%d8%a7%db%8c","attr_desc":"","value":"no"}]},{"group_id":89,"group_name":"\u0635\u0641\u062d\u0647 \u0646\u0645\u0627\u06cc\u0634","group_slug":"%d8%b5%d9%81%d8%ad%d9%87-%d9%86%d9%85%d8%a7%db%8c%d8%b4","group_desc":"","attributes":[]},{"group_id":57,"group_name":"\u067e\u0631\u062f\u0627\u0632\u0646\u062f\u0647","group_slug":"%d9%be%d8%b1%d8%af%d8%a7%d8%b2%d9%86%d8%af%d9%87","group_desc":"","attributes":[]}]
Dank für Ihre Antwort danken, aber ist es eine richtige Übrigens, ich würde es begrüßen, wenn du mir einen Hinweis gibst. – Amin
@ Amiut7 Ich habe die Antwort aktualisiert –
Vielen Dank, es funktioniert erstaunlich :) – Amin