Currently working on a project in C but I have to generate a large struct which I figured would generate in PHP since I'm more familiar with PHP.
I have 2 arrays. The first one is quite simple (is way larger than this but I assume this is enough to replicate the issue):
$vehicles = [
'vehicleSuper' => [ "adder", "autarch", "banshee2", "bullet" ],
'vehicleSport' => [ "alpha", "banshee", "bestiagts", "blista2" ],
//...
];
The second array looks like this:
$textures = [
'candc_apartments' => [
"limo2_b", "limo2",
],
'candc_default' => [
"marshall_flag18_b", "mesa_b", "rentbus", "marshall_flag21_b", "crusader", "boxville4", "buzzard_b", "dukes2_b", "dukes",
],
'lgm_default' => [
"hotknife", "coquette", "voltic_tless", "vacca", "infernus", "cogcabri_b", "stinger_b", "banshee_b", "ztype", "ninef", "jb700", "superd", "monroe_b", "rapidgt2_b", "khamel", "comet2_b", "cheetah_b", "rapidgt_b", "stinger", "carbon_b", "surano_convertable_b", "rapidgt2", "infernus_b", "jb700_b", "ninef_b", "stingerg", "superd_b", "bullet_b", "ztype_b", "hotknife_b", "cogcabri", "surano_convertable", "rapidgt", "stingerg_b", "coquette_b", "bullet", "carbon", "ninef2", "carboniz", "cheetah", "adder_b", "entityxf", "adder", "feltzer",
],
];
Now I generate the list like this using the 2 arrays above:
echo '<pre>';
foreach($vehicles as $category => $val) {
echo "vehicleSpawner " . $category . "[] = {\n";
foreach($val as $item) {
echo " { \"" . $item . "\", \"" . array_search($item, array_column($textures, $item)) . "\", \"\" },\n";
}
echo '}';
echo '<hr>';
}
This outputs something similar to:
{ "adder", "", "" },
The last 2 values are empty. What I want to achieve: Fill these out with the values from $textures
array. In this case, I'm trying to fill it up like this:
// arg 1: name from $vehicles
// arg 2: key from $textures
// arg 3: val from $textures
{ "adder", "lgm_default", "adder" },
Currently my array_search($item, array_column($textures, $item))
method doesn't seem to work. How would I go and get this working? Help is appreciated, thanks all!
array_column($textures, $item)
will search in array $textures
key named $item
, but there is no key with that name so it returns false, what you need to do is loop on $textures
array and search if value $item
exists:
foreach($val as $item) {
foreach($textures as $k => $v) {
//this will return array index or false if not exists
$pos = array_search($item, $v);
if ( $pos !== false )
echo " { \"" . $item . "\", \"" . $k . "\", \"".$v[$pos]."\" },\n";
}
}
If you want to see multiple matches within a given pair of subarrays, array_intersect()
will compare both subarrays once and iterate the results. This is more efficient than running fresh array_search()
calls for each element of one of the subarrays.
Code: ( Demo )
foreach($vehicles as $category => $v_vals) {
echo "vehicleSpawner " . $category . "[] = {\n";
foreach($textures as $k => $t_vals) {
foreach (array_intersect($v_vals, $t_vals) as $match) {
echo " { \"$match\", \"$k\", \"$match\" },\n";
}
}
echo "}\n";
}
Output:
vehicleSpawner vehicleSuper[] = {
{ "adder", "lgm_default", "adder" },
{ "bullet", "lgm_default", "bullet" },
}
vehicleSpawner vehicleSport[] = {
}
If this isn't the exact output format/structure that you desire, it can be tweaked to accommodate.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.